ユーザーが画面に触れている間だけ発光するパーティクルエフェクトを作成したいと思いますが、CAEmitterCell birthRateプロパティを変更することはできません。CAEmitterCellはbirthRateの変更を尊重していません
私は自分のCAEmitterLayerと私のCAEmitterCellを設定するUIViewのサブクラスを持っています。そのログレポートを
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint tappedPt = [touch locationInView:touch.view];
NSLog(@"began x:%f y:%f",tappedPt.x, tappedPt.y);
emitterView.emitterCell.birthRate = 42;
emitterView.emitterLayer.emitterPosition = tappedPt;
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint tappedPt = [touch locationInView:touch.view];
NSLog(@"moved x:%f y:%f",tappedPt.x, tappedPt.y);
emitterView.emitterLayer.emitterPosition = tappedPt;
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"ending %f", emitterView.emitterCell.birthRate);
emitterView.emitterCell.birthRate = 0.00;
NSLog(@"ended %f", emitterView.emitterCell.birthRate);
}
:次に
@property (strong, nonatomic) CAEmitterLayer *emitterLayer;
@property (strong, nonatomic) CAEmitterCell *emitterCell;
、私のビューコントローラでは、私がemitterLayer、およびemitterCellの出生率の位置を設定するタッチし、追跡しています:私は、そのクラスに2つのプロパティを定義していますemitterView.emitterCell.birthRateの変更:私は画面をタッチすると予想されるように、エミッタが開始
began x:402.000000 y:398.500000
ending 42.000000
ended 0.000000
Iタッチを終了するとき、層は、EMITをタッチに従うが、 terセルは、最初に設定された値(touchesBeganで設定された値)にかかわらず、喜んで放出します。私が何をしても、出生率の値を一度変更することができないようでは、一度ゼロ以外の値に設定されます。ログは、値が正しく設定されているが、エミッターは発光し続けると報告します。
しかし、私はレイヤーの位置を変更するためにtouchesEnded方法を変更した場合、私はemitterCellに出生率を設定した後、予想通り、その後、すべての作品:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
CGPoint tappedPt = [touch locationInView:touch.view];
NSLog(@"began x:%f y:%f",tappedPt.x, tappedPt.y);
NSLog(@"ending %f", emitterView.emitterCell.birthRate);
emitterView.emitterCell.birthRate = 0.0;
NSLog(@"ended %f", emitterView.emitterCell.birthRate);
emitterView.emitterLayer.emitterPosition = tappedPt;
}
誰かが理由を説明していただけますか?
あなたがこれを理解しましたか? – scott