Как изменить положение CAEmitterLayer без испускания частиц между ними?
Я хочу отображать блеск на короткий период, когда пользователь прикасается к экрану (помещается в позицию касания).
Проблема в том, когда я меняю CAEmitterLayer emitterPosition
он действует так, как будто он пытается оживить эту позицию от старого значения к новому в течение периода около 0,5 с, вместо того, чтобы мгновенно ее менять.
Например, положение эмиттера по умолчанию установлено на (0,0), поэтому, когда я впервые пытаюсь прикоснуться к центру экрана, он излучает линию искр от (0,0) до текущей позиции. излучающие искры образуют центр.
Чтобы остановить блестки, я установил слой birthRate
на 0 после небольшой задержки, потом на ощупь меняю emitterPosition
и повернуть birthRate
вернуться к 1.
Единственное решение, которое я смог найти, это задержка 0,5 с между перемещением позиции и поворотом. birthRate
на.
- (void)initSparkles {
layer = [CAEmitterLayer layer];
layer.birthRate = 0;
[sparkleView.layer addSublayer:layer];
}
- (void)showSparkles:(CGPoint)position {
layer.emitterPosition = position;
CAEmitterCell *sparkle = [CAEmitterCell emitterCell];
sparkle.props = ...;
layer.emitterCells = [NSArray arrayWithObjects:sparkle, nil];
layer.birthRate = 1.0;
[self performSelector:@selector(stopSparkles) withObject:nil afterDelay:0.05 ];
}
- (void)stopSparkles {
layer.birthRate = 0.0;
}