ทางออกที่ง่ายที่สุดคือการใช้ภาพเคลื่อนไหวโดยนัย สิ่งนี้จะจัดการกับปัญหาทั้งหมดให้คุณ:
self.layer?.backgroundColor = NSColor.red.cgColor;
หากคุณต้องการปรับแต่งเช่นระยะเวลาคุณสามารถใช้NSAnimationContext
:
NSAnimationContext.beginGrouping();
NSAnimationContext.current.duration = 0.5;
self.layer?.backgroundColor = NSColor.red.cgColor;
NSAnimationContext.endGrouping();
หมายเหตุ: นี่เป็นการทดสอบบน macOS เท่านั้น
ตอนแรกฉันไม่เห็นภาพเคลื่อนไหวใด ๆ เมื่อทำสิ่งนี้ ปัญหาคือเลเยอร์ของเลเยอร์ที่ได้รับการสนับสนุนมุมมองไม่ได้บอกเป็นนัยถึงการเคลื่อนไหว ในการแก้ปัญหานี้ตรวจสอบให้แน่ใจว่าคุณเพิ่มเลเยอร์ด้วยตัวคุณเอง (ก่อนตั้งค่ามุมมองเป็นเลเยอร์สำรอง)
ตัวอย่างวิธีการทำเช่นนี้จะเป็น:
override func awakeFromNib() {
self.layer = CALayer();
//self.wantsLayer = true;
}
การใช้self.wantsLayer
ไม่ได้สร้างความแตกต่างในการทดสอบของฉัน แต่อาจมีผลข้างเคียงบางอย่างที่ฉันไม่ทราบ
.presentation()
เพื่อรับค่า "ขั้นสุดท้ายที่เห็น" ค้นหาคำตอบที่ถูกต้องด้านล่างซึ่งอธิบายด้วยเลเยอร์การนำเสนอ