一个CALayer可以作为多个其他图层的蒙版吗?

7

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


奇怪的是,你不能这样做。每个图层都必须有自己的蒙版图层!如果你必须使用相同的蒙版,你确实需要复制它! - Fattie
2个回答

3

我的实验表明它是不行的。它最终将成为它所附加到的最后一层的掩码,而任何之前被分配为掩码的层将恢复为默认值。


Travis,如果你看到这条消息...你以前的QA似乎完全正确!很奇怪吧? - Fattie

1

这是有可能的。 我结合了 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接