当用户触摸屏幕(放置在触摸位置)时,我想在短时间内显示闪光。
问题是当我更改 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;
}