0

当用户触摸屏幕(放置在触摸位置)时,我想在短时间内显示闪光。

问题是当我更改 CAEmitterLayer 时emitterPosition,它的作用就像是在尝试在大约 0.5 秒的时间内将此位置从旧值设置为新值,而不是立即更改它。

例如,发射器位置默认设置为 (0,0),所以当我第一次尝试触摸屏幕中心时,它会从 (0,0) 到当前位置发出一条闪光线,而不是发出火花形成中心。

为了停止闪烁,我birthRate在短暂延迟后将图层设置为 0,然后在触摸时更改emitterPositionbirthRate返回 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;
}
4

0 回答 0