A solução mais fácil é usar animações implícitas. Isso resolverá todo esse problema para você:
self.layer?.backgroundColor = NSColor.red.cgColor;
Se você deseja personalizar, por exemplo, a duração, pode usar NSAnimationContext
:
NSAnimationContext.beginGrouping();
NSAnimationContext.current.duration = 0.5;
self.layer?.backgroundColor = NSColor.red.cgColor;
NSAnimationContext.endGrouping();
Nota: Isso é testado apenas no macOS.
Inicialmente, não vi nenhuma animação ao fazer isso. O problema é que a camada de uma camada com suporte de exibição não é animada implicitamente. Para resolver isso, adicione você mesmo uma camada (antes de definir a exibição como suportada por camada).
Um exemplo de como fazer isso seria:
override func awakeFromNib() {
self.layer = CALayer();
//self.wantsLayer = true;
}
O uso self.wantsLayer
não fez nenhuma diferença nos meus testes, mas pode ter alguns efeitos colaterais que eu não conheço.
.presentation()
para obter o valor "final, visto". Pesquise abaixo as respostas corretas abaixo, que explicam isso com a camada de apresentação.