我有一个UIView,并希望它的底部淡出为0不透明度。
这可以用于UIView(CALayer)以影响整个UIView及其内容吗?
答案 0 :(得分:32)
是的,您可以将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;
P.S。您还需要将QuartzCore.framework
与您的应用相关联才能使其正常运作。
答案 1 :(得分:0)
尽管弗拉基米尔(Vladimir)的答案是正确的,但问题是在视图更改后同步渐变层。例如,当您旋转手机或调整视图大小时。因此,您可以使用图片代替图层:
@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
}
}
}
然后使用简单的渐变蒙版like this,您甚至可以在情节提要中看到它。
您可以使用此class
并将UILabel
替换为您想继承的任何其他视图。
您可以使用其他形状的图像作为遮罩。