我想为图层的背景颜色设置动画。 我能够为alpha设置动画,但无法为背景颜色设置动画。
使用:
var animation = CABasicAnimation(keyPath: "opacity")
animation.toValue = 0.6
animation.duration = 0.1
customCALayer.addAnimation(animation, forKey: nil)
不起作用(没有动画,没有错误):
var animation = CABasicAnimation(keyPath: "backgroundColor")
animation.fromValue = UIColor.redColor().CGColor
animation.toValue = UIColor.whiteColor().CGColor
animation.duration = 0.1
customCALayer.addAnimation(animation, forKey: nil)
这笔交易是什么? backgroundColor
is an animatable property。
我已经阅读了几篇关于此的帖子,并且不明白我错过了什么。对于noop动画缺乏反馈是具有挑战性的,我不确定它在哪里出错。我已经尝试使用AnyObject
作为包装器投射到NSValue
,并且没有到达任何地方。
相关答案(对我不起作用):
答案 0 :(得分:1)
您的动画基本上是正确的,即使同时Swift版本已过时。当前版本看起来像这样:
let animation = CABasicAnimation(keyPath: "backgroundColor")
animation.fromValue = UIColor.red.cgColor
animation.toValue = UIColor.white.cgColor
animation.duration = 0.1
customCALayer.add(animation, forKey: nil)
如果图层的背景颜色不是白色,则动画后该图层将恢复为原始颜色。可以通过进行一些小的更改来避免这种情况:
customCALayer.backgroundColor = UIColor.white.cgColor // This step isn't necessary if the Layer is white already.
let animation = CABasicAnimation(keyPath: "backgroundColor")
animation.fromValue = UIColor.red.cgColor
animation.duration = 0.1
customCALayer.add(animation, forKey: nil)
动画将颜色从红色更改为白色,动画后该图层保持白色。
在许多情况下,隐式动画足以应付此类情况:
CATransaction.begin()
CATransaction.setAnimationDuration(0.1)
customCALayer.backgroundColor = UIColor.white.cgColor
CATransaction.commit()
使用隐式动画,您还可以轻松创建多个并行动画。例如背景颜色和不透明度:
CATransaction.begin()
CATransaction.setAnimationDuration(0.1)
customCALayer.backgroundColor = UIColor.white.cgColor
customCALayer.opacity = 0.0
CATransaction.commit()