Как изменить положение 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;
}

0 ответов

Другие вопросы по тегам