2012-06-27 34 views
11

Tôi có UIImageView và tôi muốn thêm lớp phủ màu đen lên trên nó. Cách tốt nhất để làm điều này mà không cần phải ghi đè drawRect là gì? Tôi đã nghĩ đến việc thêm một CALayer lên trên nó. Nhưng không chắc chắn làm thế nào để có được một CALayer màu đen với một .3 alpha.thêm lớp phủ màu đen với độ mờ đục 0,3 trên UIImageView

Trả lời

42

Một cái gì đó như thế này?

UIView *overlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, myImageView.frame.size.width, myImageView.frame.size.height/2)]; 
[overlay setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0.3]]; 
[myImageView addSubview:overlay]; 
+0

Tôi không nghĩ rằng bạn có nghĩa vụ phải thêm subviews để UIImageView. –

+0

@ HermanJ.RadtkeIII tại sao bạn lại nói vậy? –

+0

[Nhận xét] này (http://stackoverflow.com/questions/4892770/why-cant-you-add-a-subview-to-a-uiimageview-that-is-the-view-outlet-of-a- uiview # comment21186181_4892770) nói tốt nhất. –

4

Bạn có nghĩ đến việc thêm UIView với nền màu đenColor và 0,3 alpha làm chế độ xem phụ cho chế độ xem hình ảnh không?

4

này cũng tương tự như câu trả lời của MDT trừ sử dụng tài sản CALayer:

UIView *blackOverlay = [[UIView alloc] initWithFrame: imageView.frame]; 
blackOverlay.layer.backgroundColor = [[UIColor blackColor] CGColor]; 
blackOverlay.layer.opacity = 0.3f; 
[self.view addSubview: blackOverlay]; 
+3

Uh oh, bạn đã thực hiện một boo boo. Màu nền của CALayer là CGColor, không phải là UIColor ^^ ;. – borrrden

8

Câu trả lời MDT là đúng. Đây chỉ là một cách khác để sử dụng một số CAGradientLayer bên cạnh UIView. Tôi nghĩ rằng nó sẽ làm cho những gì bạn muốn với các tùy chọn đồ họa hơn.

đầu tiên bạn nên thêm

#import <QuartzCore/QuartzCore.h> 

đến và đi bất cứ nơi nào bạn ViewController.m mà bạn muốn thêm lớp phủ này để UIImage sử dụng của bạn:

CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
gradientLayer.frame = myImageView.layer.bounds; 

gradientLayer.colors = [NSArray arrayWithObjects: 
         (id)[UIColor colorWithWhite:0.9f alpha:0.7f].CGColor, 
         (id)[UIColor colorWithWhite:0.0f alpha:0.3f].CGColor, 
         nil]; 

gradientLayer.locations = [NSArray arrayWithObjects: 
          [NSNumber numberWithFloat:0.0f], 
          [NSNumber numberWithFloat:0.5f], 
          nil]; 

//If you want to have a border for this layer also 
gradientLayer.borderColor = [UIColor colorWithWhite:1.0f alpha:1.0f].CGColor; 
gradientLayer.borderWidth = 1; 
[myImageView.layer addSublayer:gradientLayer]; 

Tôi hy vọng điều này sẽ giúp bạn thực hiện nó

+0

bạn có thể xây dựng nó plz? –

11

Nhờ Mick MacCallum

Swift 3 Version

let overlay: UIView = UIView(frame: CGRect(x: 0, y: 0, width: cell.imageView.frame.size.width, height: cell.imageView.frame.size.height)) 
overlay.backgroundColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.1) 
cell.imageView.addSubview(overlay) 

Tôi đã sử dụng cho Swift 2,2

let overlay: UIView = UIView(frame: CGRectMake(0, 0, cell.imageView.frame.size.width, cell.imageView.frame.size.height)) 
overlay.backgroundColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 0.1) 
cell.imageView.addSubview(overlay) 
Các vấn đề liên quan