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