我无法在文档中找到任何指示单个CALayer(或子类)是否可用作多个其他图层的mask
属性的内容。可能吗?还是未定义?
答案 0 :(得分:2)
我的实验说它不能。它将最终作为它所附着的最后一个图层的蒙版,并且它被指定为蒙版的任何先前图层将恢复为蒙版的默认值。
答案 1 :(得分:2)
有可能。 我结合了CAGradationLayer和CAShapeLayer的面具。
我从两层制作UIImage
,然后用它来掩盖。
您可以从CALayer生成图像,如下所示。
extension CALayer {
func makeImage() -> UIImage {
UIGraphicsBeginImageContext(self.frame.size)
self.renderInContext(UIGraphicsGetCurrentContext())
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
并且您可以通过多个图层进行遮罩。
firstMask.mask = secondMask
let img = firstMask.makeImage()// require firstMask.frame
let combinedMask = CALayer()
combinedMask.frame = CGRectMake(0,0, img.size.width, img.size.height)
combinedMask.contents = img.CGImage
yourLayer.mask = combinedMask