2016-09-17 7 views
0

私はCAShapeLayerを持っています。そのstrokeEndは時々NSTimerループ内で更新されます。私が電話したときにうまくいきます:CAShapeLayerをアニメートする:完了時に

myPathLayer.strokeEnd += 0.1 

このパスの変更は、必要に応じて自動的にアニメーション化されます。私の質問は、これは関数呼び出しではないので、完了ブロックはありません。このアニメーションが完了したら別のアクションを実行したいと思います。どうすればこれを達成できますか?

答えて

1

CATransactionでラップインして、レイヤーアニメーションの完了ブロックを設定できます。

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

うまくいけば良い方法がありますが、これは私が行った方法です。

+0

を。ありがとう。 – Connor

0

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> } 
} 
関連する問題