我有一个 UIView 并希望它的底部淡出为 0 不透明度。
可以对 UIView (CALayer) 执行此操作以影响整个 UIView 及其内容吗?
是的,您可以通过设置CAGradientLayer
为视图的图层蒙版来做到这一点:
#import <QuartzCore/QuartzCore.h>
...
CAGradientLayer *maskLayer = [CAGradientLayer layer];
maskLayer.frame = view.bounds;
maskLayer.colors = @[(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor];
maskLayer.startPoint = CGPointMake(0.5, 0);
maskLayer.endPoint = CGPointMake(0.5, 1.0);
view.layer.mask = maskLayer;
PS您还需要链接QuartzCore.framework
到您的应用程序才能使事情正常进行。
虽然弗拉基米尔的回答是正确的,但问题是在视图更改后同步渐变层。例如,当您旋转手机或调整视图大小时。因此,您可以使用图像来代替图层:
@IBDesignable
class MaskableLabel: UILabel {
var maskImageView = UIImageView()
@IBInspectable
var maskImage: UIImage? {
didSet {
maskImageView.image = maskImage
updateView()
}
}
override func layoutSubviews() {
super.layoutSubviews()
updateView()
}
func updateView() {
if maskImageView.image != nil {
maskImageView.frame = bounds
mask = maskImageView
}
}
}
然后用这样一个简单的渐变蒙版,你甚至可以在故事板中看到它。
您可以使用它class
并替换UILabel
为您喜欢子类化的任何其他视图。
您可以像这样使用任何其他形状的图像作为蒙版。