紙吹雪効果を作成するように を設定しようとしてCAEmitterLayer
いますが、2 つの問題が発生しました。
- セルをゼロ以外に設定してアニメーションを開始するたびに
birthRate
、画面上にランダムに配置されたセルが次々と表示され、正常にアニメーションし、エミッターはその後も適切に放出し続けます。 - が画面に何かを描いているときはいつでも、
emitterCells
私が画面に触れるたびに、エミッターはemitterCells
(一見) ランダムな時間存在する (一見) ランダムな場所に描画します。エミッター内の何もタッチ イベントに関連付けられていません (つまり、意図的にタッチ イベントに何も描画していません) が、レイヤーは複数の埋め込みビューを持つビュー内にあります。触れば触れるほど、細胞が現れます。
エミッターをセットアップし、それを開始および停止するためのコードを次に示します (いったん停止関数を呼び出した後、画面をタップすると、新しいランダム要素の作成が停止します)。
- (void)setupConfetti
{
self.confettiLayer = [CAEmitterLayer layer];
[self.view.layer addSublayer:self.confettiLayer];
[self.view.layer setNeedsDisplay];
self.confettiLayer.emitterPosition = CGPointMake(1024.0/2,-50.0);
self.confettiLayer.emitterSize = CGSizeMake(1000.0, 10.0);
self.confettiLayer.emitterShape = kCAEmitterLayerLine;
self.confettiLayer.renderMode =kCAEmitterLayerUnordered;
CAEmitterCell *confetti = [CAEmitterCell emitterCell];
confetti1.contents = (id)[[UIImage imageNamed:@"confetti.png"] CGImage];
confetti.emissionLongitude = M_PI;
confetti.emissionLatitude = 0;
confetti.lifetime = 5;
confetti.birthRate = 0.0;
confetti.velocity = 125;
confetti.velocityRange = 50;
confetti.yAcceleration = 50;
confetti.spin = 0.0;
confetti.spinRange = 10;
confetti.name = @"confetti1";
self.confettiLayer.emitterCells = [NSArray arrayWithObjects:confetti, nil];
}
紙吹雪を開始するには:
- (void)startConfettiAnimation
{
[self.confettiLayer setValue:[NSNumber numberWithInt:10.0] forKeyPath:@"emitterCells.confetti.birthRate"];
}
そしてそれを止めるには:
- (void)stopConfettiAnimation
{
[self.confettiLayer setValue:[NSNumber numberWithInt:0.0] forKeyPath:@"emitterCells.confetti.birthRate"];
}
繰り返しになりますが、いったん開始すると、ランダムな要素が最初に飛び交った後、これは問題なく機能します。すべてが正常にアニメーション化され、その後birthRateがゼロに設定されると、正常に終了します。タッチ イベントに応答しているように見えますが、その理由はわかりません。エミッターレイヤーを別のビューに追加し、そのビューでのユーザー操作を無効にしてから、メイン ビューのサブビューとして追加しようとしましたが、うまくいかないようでした。
どんな助け/洞察も大歓迎です!
ありがとう、サム