动画 CAShapeLayer:完成时做

Animating CAShapeLayer: Do On Completion

我有一个 CAShapeLayer,它的 strokeEnd 我偶尔会在 NSTimer 循环中更新。效果很好,当我打电话时:

myPathLayer.strokeEnd += 0.1

此路径更改会根据我的需要自动设置动画。我的问题是,因为这不是函数调用,所以没有完成块。一旦这个动画完成,我想执行另一个动作。我怎样才能做到这一点?

您可以使用 CATransaction 包装来为层动画设置完成块。

CATransaction.begin()
CATransaction.setCompletionBlock({self.myFunction()})
myPathLayer.strokeEnd += 0.1
CATransaction.commit()

希望有更好的方法,但我就是这样做的。

您可以使用 CAAnimation 委托方法。

class Whatever: CAAnimationDelegate { ...

然后

let animation = CABasicAnimation(keyPath: <your_key_path>)
...
animation.delegate = self

并使用委托方法:

func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {

     if flag { <do_what_you_need_to> }
}