簡體   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