我在文档中没有找到任何关于单个CALayer(或其子类)是否可以用作多个其他图层的mask
属性的指示。这是可能的吗?还是未定义的?
我在文档中没有找到任何关于单个CALayer(或其子类)是否可以用作多个其他图层的mask
属性的指示。这是可能的吗?还是未定义的?
我的实验表明它是不行的。它最终将成为它所附加到的最后一层的掩码,而任何之前被分配为掩码的层将恢复为默认值。
这是有可能的。 我结合了 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