2013-02-11 18 views
6

cho phép nói rằng tôi có UIImageView có khung (0,0,100,30) . Imageview đã được gán một hình ảnh.Làm thế nào để ẩn một khung phụ của một UIView?

cách đơn giản nhất để chỉ hiển thị một phần của hình ảnh là gì? Ví dụ:

ví dụ: chỉ những gì xuất hiện ở các điểm 30-60 (chiều rộng) và 0-30 (chiều cao). điều đó có nghĩa là các cạnh trái và phải của hình ảnh sẽ bị ẩn.

chỉ để làm rõ, tôi không muốn di chuyển chế độ xem cũng như thay đổi kích thước của nó, tôi chỉ muốn ẩn một phần phụ của khung hình của nó.

Trả lời

3

Bạn luôn có thể đặt mặt nạ.

CALayer *maskLayer = [CALayer layer]; 
maskLayer.backgroundColor = [UIColor blackColor].CGColor; 
maskLayer.frame = CGRectmake(30.0, 0.0, 30.0, 30.0); 

view.layer.mask = maskLayer; 

Mặt nạ có thể được bất kỳ loại lớp, do đó bạn thậm chí có thể sử dụng một CAShapeLayer cho mặt nạ phức tạp và làm một số công cụ thực sự mát mẻ.

+0

fillColor tài sản không tìm thấy trên đối tượng của loại 'CALayer *'. Tôi có thiếu nhập không? –

+0

vì vậy, thiết lập màu nền cho một CGColor (không fillColor) đã làm các trick. @Ryan Poolos, chỉnh sửa câu trả lời của bạn và tôi sẽ chấp nhận nó. –

+0

Ồ tôi xin lỗi. 'fillColor' là thuộc tính trên' CAShapeLayer' và tôi thường sử dụng một lớp hình dạng cho mặt nạ của mình. Người bị thói quen chi phối cuộc sống hàng ngày. : p –

0

Tôi tin rằng mặt nạ hình ảnh là tùy chọn tốt nhất. Nhưng nếu bạn xoay, biến đổi, tạo hiệu ứng động hoặc muốn có nền rõ ràng, bạn có thể làm điều gì đó như sau:

Tạo chế độ xem phụ là kích thước của hình ảnh bạn muốn hiển thị. Đảm bảo rằng nó có clipsToBounds thành đúng và định vị hình ảnh cho phù hợp.

UIView *mainView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 30)]; 

//this is the part of the image you wish to see 
UIView *imageWindow = [[UIView alloc] initWithFrame:CGRectMake(30, 0, 30, 30)]; 
imageWindow.clipsToBounds = YES; 

//your image view is the height and width of mainView and x and y is imageWindow - mainView. You can do this manually or put in calculations. 
UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(imageWindow.frame.origin.x - mainView.frame.origin.x, imageWindow.frame.origin.y - mainView.frame.origin.y, mainView.frame.size.width, mainView.frame.size.height)]; 
myImage.image = [UIImage imageNamed:@"1024x1024.png"]; 

[imageWindow addSubview:myImage]; 
[mainView addSubview:imageWindow]; 
[self.view addSubview:mainView]; 

Nhìn qua mã của tôi, tôi không nghĩ rằng mainView là cần thiết và bạn có thể thêm imageWindow để self.view trực tiếp.

0

tôi đã tìm thấy giải pháp này làm việc cho tôi, https://stackoverflow.com/a/39917334/3192115

func mask(withRect rect: CGRect, inverse: Bool = false) { 
    let path = UIBezierPath(rect: rect) 
    let maskLayer = CAShapeLayer() 

    if inverse { 
     path.append(UIBezierPath(rect: self.view.bounds)) 
     maskLayer.fillRule = kCAFillRuleEvenOdd 
    } 

    maskLayer.path = path.cgPath 
    imageView?.layer.mask = maskLayer 
} 
Các vấn đề liên quan