当我尝试从创建的“自定义图层类”中复制对象时,创建的副本与原始对象匹配,但是原始对象会失去其蒙版。
为了执行复制,我创建了自定义类的扩展:
extension CustomLayer: NSCopying {
func copy(with zone: NSZone? = nil) -> Any {
let clone = CustomLayer()
// Type Properties
clone.colorFill = self.colorFill
clone.colorMap = self.colorMap
clone.radius = self.radius
// LayerProperties
clone.frame = self.frame
clone.cornerRadius = self.cornerRadius
clone.opacity = self.opacity
clone.position = self.position
clone.shadowRadius = self.shadowRadius
clone.shadowColor = self.shadowColor
clone.shadowOffset = self.shadowOffset
clone.shadowOpacity = self.shadowOpacity
clone.shadowPath = self.shadowPath
clone.mask = self.mask
return clone
}
}
然后我用这种方式创建一个副本:
let originalLayer = CustomLayer()
...
view.layer.addSublayer(originalLayer)
let copyLayer = originalLayer.copy() as! CustomLayer
view.layer.addSublayer(copyLayer)
从屏幕快照中可以看到,副本中的原始图层不再具有蒙版。
我过去在其他自定义图层类中使用过此方法,但直到现在我都从未遇到过此问题。我还尝试创建一个CALayer
实例的self.mask
,然后将其作为掩码应用于副本,但是结果是相同的。
任何指针将不胜感激!
提前感谢您的时间!
答案 0 :(得分:0)
我的直觉告诉我,您可能必须在复制实现中复制掩码。我发现这个问题支持我的直觉。
Can a single CALayer be used as the mask for multiple other layers?