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

我在文档中找不到任何指示单个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