动画 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> }
}
我有一个 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> }
}