每次重复相同动画之前更改CAShapeLayer的路径

时间:2015-04-27 15:32:49

标签: ios animation

我有这个动画完成定义路径的strokeEnd,我想在继续动画之前改变路径。 换句话说,动画应该是这样的:

path1 animation =>将path1更改为path2 => path2 animation =>将path2更改为path1 => path1动画(因此永远重复)

在上图中,path1和path2动画是这样写的动画:

        let strokeAnimation = CABasicAnimation(keyPath: "strokeEnd")
        strokeAnimation.duration = 1
        strokeAnimation.fromValue = 0
        strokeAnimation.toValue = 1
        strokeAnimation.repeatCount = HUGE
        strokeAnimation.timingFunction = CAMediaTimingFunction(name: "easeInEaseOut")

我该如何实现?

1 个答案:

答案 0 :(得分:1)

我通过使用CADisplayLink

来解决这个问题
    displayLink = CADisplayLink(target: self, selector: Selector("updatePathForLoadingLayer"))
    displayLink?.frameInterval = 60
    displayLink?.addToRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)

通过将frameInterval设置为60,屏幕的刷新率将是每秒一次,因此CAShapeLayer的路径将在fun" updatePathForLoadingLayer"中处理。

稍后,在" stopAnimation"函数,我通过停止刷新来删除set nil到displayLink。

    displayLink?.removeFromRunLoop(NSRunLoop.mainRunLoop(), forMode: NSDefaultRunLoopMode)
    displayLink = nil

希望这有助于那些需要它的人。

P.S。任何改进都将受到赞赏。