CABasicAnimation在动画开始前快速跳转

时间:2015-12-22 20:01:56

标签: ios xcode swift cabasicanimation caanimation

Animation Problem

我有CABasicAnimation动画CAShapeLayer的strokeEnd属性。每次我添加动画时,它都会快速跳过动画,然后进行真正的动画制作(如上图所示)。如果我在viewDidLoad中添加动画,则不会发生这种情况。

这是我的动画代码:

let progressAnim = CABasicAnimation(keyPath: "strokeEnd")
progressAnim.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault)
progressAnim.duration = 4.5
progressAnim.fromValue = 0.0
progressAnim.toValue = 1.0

progressAnim.removedOnCompletion = false

progressLayer.addAnimation(progressAnim, forKey: "progressAnimation")
progressLayer.strokeEnd = 1.0

我不确定我到底做错了什么,任何帮助都会受到高度赞赏。谢谢!

1 个答案:

答案 0 :(得分:1)

我的问题在于行progressLayer.strokeEnd = 1.0。我在我的代码中有这个原因是为了阻止动画在完成动画时回到它的原始值。

下一个解决方案是将fillMode设置为progressAnim.fillMode = kCAFillModeForwards,将removedOnCompletion设置为progressAnim.removedOnCompletion = false。这种方式解决了我的问题。但它创造了另一个。在我的代码中,此解决方案不会将strokeEnd属性更新为toValue

我的最终解决方案是将toValue设置为strokeEnd内的override func animationDidStop(anim: CAAnimation, finished flag: Bool)

我的动画代码:

let progressAnim = CABasicAnimation(keyPath: "strokeEnd")
        progressAnim.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault)
        progressAnim.duration = animationDuration
        progressAnim.fromValue = 0.0
        progressAnim.toValue = 0.5
        progressAnim.delegate = self

        progressLayer.addAnimation(progressAnim, forKey: "progressAnimation")

动画完成时的代码:

override func animationDidStop(anim: CAAnimation, finished flag: Bool) {            
        progressLayer.strokeEnd = 0.5
        progressLayer.removeAllAnimations()
    }