CAEmitterLayer
といくつかの で爆発をアニメーション化しようとしていCAEmitterCell
ます。これは、ユーザーがビューを表示した後、少し遅れて発生するはずです。でアニメーションを開始しviewDidAppear
ます。
パーティクル アニメーション自体は正常に動作しますが、この質問のように、アニメーションがしばらく実行されているものとしてユーザーに表示されるように設定しない限り、CAEmitterLayer からの初期パーティクルはエミッタ位置で開始されません。emitterLayer.beginTime = CACurrentMediaTime()
実際に爆発を起こすには、ある時点でパーティクルの放出を停止する必要があります。このコードを使用してCABasicAnimation
、しばらくするとエミッターを停止するセットアップを試みます。
// emitter layer is reused (remove all animations, remove all cells, remove from superlayer)
... // emitter layer setup in a function "explode" which is called from viewDidAppear
emitterLayer.beginTime = CACurrentMediaTime()
let birthRateAnimation = CABasicAnimation(keyPath: "birthRate")
birthRateAnimation.toValue = 0
birthRateAnimation.timingFunction = CAMediaTimingFunction.init(name:kCAMediaTimingFunctionEaseOut)
birthRateAnimation.beginTime = CACurrentMediaTime() + 1
birthRateAnimation.duration = 5
birthRateAnimation.delegate = self // (self is view controller)
birthRateAnimation.setValue("expl", forKey: "animName")
emitterLayer.add(birthRateAnimation, forKey: "birthRateAnimation")
self.view.layer.addSublayer(emitterLayer)
したがって、このコードbirthRateAnimation
では実際にはトリガーされません。ログインしanimationDidStop
ていますが、animationDidStart
何も印刷されません。
ここで、explode
ボタン タップで関数を呼び出すと、パーティクル アニメーションはまったく表示されませんが、ログには「アニメーション開始」/「アニメーション停止」メッセージが表示されます。
理由はありますか?