动画化 CALayer 背景颜色并更新模型值

Animating CALayer background color and update model value

我想在我的 UIView(在 tintColorDidChange 上)为子层设置 backgroundColor 动画变化。

我需要多次将图层的当前背景颜色设置为新的色调(每次不同的色调),因此需要更新 backgroundColor 的模型值(我不能使用 removedOnCompletion = false在动画上)。

如果我不更新模型值,使用 CABasicAnimation 可以让颜色变化动画正常工作(当然,颜色会在动画完成后重置)。 当我尝试更新模型值时,颜色立即发生变化并且动画丢失。

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

如何更新 backgroundColor 模型值并保持淡入淡出动画正常工作?

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

为动画使用明确的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

}