单个CALayer可以用作多个其他图层的蒙版吗?

时间:2014-11-12 00:12:59

标签: ios core-animation calayer mask

我无法在文档中找到任何指示单个CALayer(或子类)是否可用作多个其他图层的mask属性的内容。可能吗?还是未定义?

2 个答案:

答案 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