触摸在触摸点后延迟移动CAEmitterLayer …

我偶然发现了一个问题:解决第一个问题,现在当手指在屏幕上移动时,我的粒子轨迹被延迟到触摸位置的后面。

当我通过覆盖来初始化CAEmitterLayer时,它工作的很好

+ (Class) layerClass { //configure the UIView to have emitter layer return [CAEmitterLayer class]; } 

并用。初始化

 fireEmitter = (CAEmitterLayer*)self.layer; 

我改变了

 fireEmitter = [CAEmitterLayer layer]; fireEmitter.frame = self.bounds; [self.layer addSublayer:fireEmitter]; 

现在发射器单元就像艺妓一样跟着移动的触摸点

这是为什么? 因为我现在在chnaged发射器正在发射的层? 请帮忙! 日Thnx

你每秒只能得到这么多的触摸事件,而且每秒只能在屏幕上画出一定的次数。 我们来做一些math。

假设你可以在166毫秒的整个屏幕上对angular地移动手指(快速滑动)。 假设你正在渲染足够的粒子,使设备从60 FPS减速到30 FPS(每个渲染周期33毫秒)。 这意味着你只需要花费5次触摸回拨来刷新屏幕。 这反过来又意味着你只有在手指每移动100个像素的时候才会发生触摸事件。

所以,即使你假定你所接触到的触摸位置没有滞后(没有),你只能经常得到它们,你几乎总是会有一些明显的滞后。 减less这种滞后的唯一方法是增加帧速率(通过使用更less/更小的粒子或切换到可以更好地扩展粒子数量的技术,如OpenGL)。 你应该首先使用仪器来validation帧率实际上是你的问题。

注意:在设置发射器位置时,我测量了使用[CATransaction setDisableActions:YES]的效果,但没有看到差异,所以这不完全是使用隐式animation的问题。