เมื่อฉันพยายามคัดลอกออบเจ็กต์จากคลาสเลเยอร์แบบกำหนดเองที่ฉันสร้างขึ้น สำเนาที่สร้างขึ้นนั้นตรงกับต้นฉบับ แต่ต้นฉบับสูญเสียการมาสก์ไป
เพื่อดำเนินการคัดลอก ฉันได้สร้างส่วนขยายของคลาสที่กำหนดเองของฉัน:
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)
ดังที่คุณเห็นจากภาพหน้าจอ เลเยอร์ดั้งเดิมไม่มีมาสก์อีกต่อไปในขณะที่สำเนามีอยู่
ฉันเคยใช้วิธีนี้กับ Custom Layer Class อื่นๆ มาก่อน และฉันไม่เคยพบปัญหานี้เลยจนกระทั่งตอนนี้ ฉันได้ลองสร้าง CALayer
ที่เป็นอินสแตนซ์ของ self.mask
แล้วใช้มันเป็นมาสก์กับสำเนา แต่ผลลัพธ์ก็เหมือนเดิม
พอยน์เตอร์ใด ๆ จะได้รับการชื่นชมอย่างมาก!
ขอขอบคุณล่วงหน้าสำหรับเวลาของคุณ!