Самое простое решение - использовать неявную анимацию. Это решит все эти проблемы за вас:
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
не имело никакого значения в моем тестировании, но могло иметь некоторые побочные эффекты, о которых я не знаю.
.presentation()
чтобы получить "окончательное, увиденное" значение. Найдите правильные ответы ниже, которые объясняют, что это сделано на уровне представления.