繁体   English   中英

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

[英]Animating CALayer background color and update model value

我想为我的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()
}

对动画使用显式的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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM