Initialpartikel von CAEmitterLayer starten nicht bei emitterPosition

Mein Ziel ist es, eine explosionsartige Animation zu erstellen, bei der viele Partikel in kurzer Zeit emittiert werden. Mein Problem ist, dass CAEmitterLayer, wenn es zu emittieren beginnt, "zukünftige" Partikel hinzufügt, damit es so aussieht, als ob die Animation schon eine Weile läuft.

Wie kann ich dies deaktivieren oder umgehen? Wenn ich die birthRate erhöhe, sollen nur Partikel aus der emitterPosition heraus angezeigt werden und nicht zu jedem Zeitpunkt während der projizierten Lebensdauer von CAEmitterCell. Jede Hilfe wird gebeten.

#import "EmitterView.h"

@interface EmitterView ()

@property CAEmitterLayer* emitter;

@end

@implementation EmitterView

- (void) awakeFromNib {
    [super awakeFromNib];
    self.emitter = (CAEmitterLayer*)self.layer;

    CAEmitterCell* snowflake = [CAEmitterCell emitterCell];
    snowflake.contents = (id)[[UIImage imageNamed: @"snowflake"] CGImage];
    snowflake.lifetime = 3;
    snowflake.birthRate = 1;
    snowflake.velocity = 50;
    snowflake.emissionRange = 3.1415;

    self.emitter.birthRate = 0;
    self.emitter.emitterCells = [NSArray arrayWithObject: snowflake];
    self.emitter.emitterPosition = CGPointMake(100, 100);
    self.emitter.emitterSize = CGSizeMake(0, 0);
    self.emitter.emitterShape = kCAEmitterLayerPoint;
}

+ (Class) layerClass {
    return [CAEmitterLayer class];
}

- (void) burst {
    self.emitter.birthRate = 10;
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        self.emitter.birthRate = 0;
    });
}

@end

Antworten auf die Frage(2)

Ihre Antwort auf die Frage