我想为我的UIView(backgroundColor
)中的子图层设置tintColorDidChange
更改动画。
我需要从图层的当前背景颜色动画几次到新的色调颜色(每次都有不同的色调),因此需要更新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()
}
答案 0 :(得分:4)
对动画使用明确的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
}