gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:22:58 24 4
gpt4 key购买 nike

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

}

关于ios - 动画化 CALayer 背景颜色并更新模型值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29064668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com