Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使UIView具有透明渐变效果?_Ios_Swift_Uiview_Gradient - Fatal编程技术网

Ios 如何使UIView具有透明渐变效果?

Ios 如何使UIView具有透明渐变效果?,ios,swift,uiview,gradient,Ios,Swift,Uiview,Gradient,我想让一个UIView具有从中间到左右的透明渐变效果。如本例所示: 单词籍具有所需的效果。这个观点是由类实现的。我检查了源代码,它可能是由classCALayer实现的 您可以使用CAGradientLayer如下所示 gradientLayer = [CAGradientLayer layer]; gradientLayer.frame = baseView.bounds; gradientLayer.startPoint = CGPointMake(0.5,0.0); gradientLa

我想让一个
UIView
具有从中间到左右的透明渐变效果。如本例所示:


单词
具有所需的效果。这个观点是由类实现的。我检查了源代码,它可能是由class
CALayer
实现的

您可以使用
CAGradientLayer
如下所示

gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = baseView.bounds;
gradientLayer.startPoint = CGPointMake(0.5,0.0);
gradientLayer.endPoint = CGPointMake(0.5,1.0);
gradientLayer.locations = @[@(0.0), @(0.2), @(1.0)];
gradientLayer.colors = @[(id)[UIColor colorWithWhite:1.0 alpha:0.9].CGColor,
                         (id)[UIColor colorWithWhite:1.0 alpha:0.3].CGColor,
                         (id)[UIColor colorWithWhite:1.0 alpha:0.0].CGColor];
[baseView.layer addSublayer:gradientLayer];
CAGradientLayer
支持几个属性来生成自然渐变,例如通过
startPoint
endPoint
设置渐变方向,通过
位置更改颜色曲线
颜色

您还可以使用颜色的alpha通道来产生透明效果。

屏幕截图

Swift代码

let mask = CAGradientLayer()
mask.startPoint = CGPointMake(0.0, 0.5)
mask.endPoint = CGPointMake(1.0, 0.5)
let whiteColor = UIColor.whiteColor()
mask.colors = [whiteColor.colorWithAlphaComponent(0.0).CGColor,whiteColor.colorWithAlphaComponent(1.0),whiteColor.colorWithAlphaComponent(1.0).CGColor]
mask.locations = [NSNumber(double: 0.0),NSNumber(double: 0.2),NSNumber(double: 1.0)]
mask.frame = label.bounds
label.layer.mask = mask
Swift 3:

let mask = CAGradientLayer()
mask.startPoint = CGPoint(x: 0, y: 0.5)
mask.endPoint = CGPoint(x:1.0, y:0.5)
let whiteColor = UIColor.white
mask.colors = [whiteColor.withAlphaComponent(0.0).cgColor,whiteColor.withAlphaComponent(1.0),whiteColor.withAlphaComponent(1.0).cgColor]
mask.locations = [NSNumber(value: 0.0),NSNumber(value: 0.2),NSNumber(value: 1.0)]
mask.frame = view.bounds
view.layer.mask = mask

在Swift 4中:用于从上到下的透明渐变

let gradient = CAGradientLayer()
gradient.startPoint = CGPoint(x: 0.5, y: 0.0)
gradient.endPoint = CGPoint(x: 0.5, y: 0.6)
let whiteColor = UIColor.white
gradient.colors = [whiteColor.withAlphaComponent(0.0).cgColor, whiteColor.withAlphaComponent(1.0).cgColor, whiteColor.withAlphaComponent(1.0).cgColor]
gradient.locations = [NSNumber(value: 0.0),NSNumber(value: 0.2),NSNumber(value: 1.0)]
gradient.frame = gradientView.bounds
gradientView.layer.mask = gradient

使用清晰的颜色,而不是设置alpha值

let gradientLayer = CAGradientLayer()
gradientLayer.startPoint = CGPoint(x: 0, y: 0.5)
gradientLayer.endPoint = CGPoint(x: 1, y: 0.5)
gradientLayer.colors = [UIColor.clear.cgColor, UIColor.white.cgColor, UIColor.white.cgColor]
gradientLayer.locations = [0, 0.2, 1]
gradientLayer.frame = gradientView.bounds
gradientView.layer.mask = gradientLayer

“问题被标为objective-c,而不是swift。”安德烈斯说。我懂了。利奥已经提出了一个快速版本。所以我可能不会编辑我的答案。:-)如果有人需要objective-c版本,这将是有帮助的。谢谢你的回答。我按照你的想法用swift重写了代码,并成功了。:-)我不得不把最后一行改成self.submitButtonBackground.layer.mask=gradientLayer
使其在iOS 11中工作非常完美!谢谢。你只需要使用不透明度。令人恼火的是,它被命名为alpha表示视图,而不透明度表示CALayer。