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

Des*_*uan 12 gradient uiview ios swift

我想UIView从中间到左边和右边做一个透明渐变的效果.就像在这个例子中:

在此输入图像描述

这个词?有所期望的效果.这个视图是由MarqueeLabel实现的.我检查了源代码,它可能是由类实现的CALayer.

Leo*_*Leo 12

截图

在此输入图像描述

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
Run Code Online (Sandbox Code Playgroud)


R. *_*han 12

在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
Run Code Online (Sandbox Code Playgroud)


Kyo*_*ang 10

您可以使用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];
Run Code Online (Sandbox Code Playgroud)

CAGradientLayer支持几种属性,使自然梯度,例如通过设置梯度方向startPointendPoint,通过改变颜色曲线locationscolors.

您还可以使用颜色的Alpha通道制作透明效果.

  • 这个问题被标记为objective-c,而不是swift。 (2认同)
  • 我必须将最后一行更改为“self.submitButtonBackground.layer.mask =gradientLayer;”才能使其在iOS 11中工作 (2认同)

jyl*_*ang 5

斯威夫特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
Run Code Online (Sandbox Code Playgroud)