animationCALayer背景颜色和更新模型值

我想为我的UIView(在tintColorDidChange )中的一个子图层的backgroundColor改变animation。

我需要从图层的当前背景颜色animation多次到新的色调颜色(每次不同的色调),所以需要更新backgroundColor的模型值(我不能在animation上使用removedOnCompletion = false )。

使用CABasicAnimation我有颜色更改animation工作正常,如果我不更新模型值(但当然animation完成后颜色重置)。 当我尝试更新模型值时,颜色变化立即发生,animation丢失。

我试图禁用隐式animation并使用CATransation更新模型值,但animation仍然丢失。

我如何更新backgroundColor模型的值,并保持我的淡出animation工作?

 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() } 

为animation使用明确的fromValue

 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 }