Animación del color de background de CALayer y actualización del valor del model

Quiero animar un cambio backgroundColor para una subcapa en mi UIView (en tintColorDidChange ).

Necesito animar desde el color de background actual de la capa hasta el nuevo color de tinte varias veces (colors de tinte diferentes cada vez), por lo que el valor del model para backgroundColor debe actualizarse (no puedo usar removedOnCompletion = false en la animation).

Utilizando CABasicAnimation, tengo la animation de cambio de color funcionando bien si no actualizo el valor del model (pero, por supuesto, el color se reinicia después de que se completa la animation). Cuando trato de actualizar el valor del model, el cambio de color ocurre inmediatamente y la animation se pierde.

CATransation deshabilitar la animation implícita y actualizar el valor del model con CATransation pero la animation aún se pierde.

¿Cómo puedo actualizar el valor del model backgroundColor y mantener funcionando mi animation de desvanecimiento?

 override func tintColorDidChange() { super.tintColorDidChange() let colourAnim = CABasicAnimation(keyPath: "backgroundColor") colourAnim.toValue = self.tintColor.CGColor colourAnim.duration = 1.0 self.spinnerLayer?.addAnimation(colourAnim, forKey: "colourAnimation") CATransaction.begin() CATransaction.setDisableActions(true) self.spinnerLayer?.backgroundColor = self.tintColor.CGColor CATransaction.commit() } 

Use un explícito fromValue para la animation:

 override func tintColorDidChange() { super.tintColorDidChange() let colourAnim = CABasicAnimation(keyPath: "backgroundColor") colourAnim.fromValue = self.spinnerLayer!.backgroundColor colourAnim.toValue = self.tintColor.CGColor colourAnim.duration = 1.0 self.spinnerLayer?.addAnimation(colourAnim, forKey: "colourAnimation") self.spinnerLayer?.backgroundColor = self.tintColor.CGColor }