Iphone 在UIImageView上添加不透明度为0.3的黑色覆盖

Iphone 在UIImageView上添加不透明度为0.3的黑色覆盖,iphone,objective-c,ios,ipad,calayer,Iphone,Objective C,Ios,Ipad,Calayer,我有一个UIImageView,我想在上面添加一个黑色的覆盖层。不必重写drawRect的最佳方法是什么?我在考虑在上面加一个加油器。但是不确定如何获得一个带有.3 alpha的黑色CALayer。您是否考虑过在图像视图中添加一个带有黑色背景色和0.3 alpha的UIView UIView *overlay = [[UIView alloc] initWithFrame:CGRectMake(0, 0, myImageView.frame.size.width, myImageView.fra

我有一个UIImageView,我想在上面添加一个黑色的覆盖层。不必重写drawRect的最佳方法是什么?我在考虑在上面加一个加油器。但是不确定如何获得一个带有.3 alpha的黑色CALayer。

您是否考虑过在图像视图中添加一个带有黑色背景色和0.3 alpha的
UIView

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];

除了使用CALayer属性外,这与MDT的答案类似:

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

MDT的答案是正确的。这只是使用
UIView
旁边的
CAGradientLayer
的另一种方法。我认为它将使你想要的更多的图形选项

首先你应该加上

#import <QuartzCore/QuartzCore.h>
我希望这将帮助您成功

多亏了

Swift 3版本

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)
我使用了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)

Swift 5版本:

func addOverlay(on view: UIView) {
    let overlay: UIView = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height))
    overlay.backgroundColor = UIColor.gray
    view.addSubview(overlay)
}

哦,你做了一个嘘声。CALayer的背景色是CGColor,而不是UIColor^;。我认为您不应该将子视图添加到UIImageView。这说明最好。@HermanJ.radtkeii这是一个意见?在imageview中添加子视图是两个缺点中较小的一个。任何地方都没有正式声明您不应该这样做,但这是对
colorWithPatternImage:
预期功能的公然滥用。。。。而且。。。这样做还将丧失您使用图像视图内置内容模式的能力,如方面填充/适合等。我不主张使用
colorWithPatternImage:
作为解决方案。我通常创建一个包含两个子视图的
UIView
:一个
UIImageView
和一个具有覆盖层的
UIView
。我认为苹果不允许在IB中创建子视图这一事实足以说明我们不应该引导人们走这条路。@HermanJ.radtkeii我明白你的观点。当我不在手机上时,我将编辑这篇文章以包含更多解决此问题的方法。谢谢你提起这个!你能详细说明一下吗?
func addOverlay(on view: UIView) {
    let overlay: UIView = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height))
    overlay.backgroundColor = UIColor.gray
    view.addSubview(overlay)
}