我有这个动画完成定义路径的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")
我该如何实现?
答案 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。任何改进都将受到赞赏。