Touchesmoved CAEmitterLayer在触摸点后延迟了距离......

时间:2012-06-07 11:13:20

标签: objective-c ios touchesmoved caemitterlayer

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

当我通过覆盖

初始化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];

现在发射器单元跟踪移动的触摸点,如距离中的geishas

为什么?因为我现在发射了发射器发射的层? 请帮忙! 日Thnx

1 个答案:

答案 0 :(得分:1)

您每秒钟只能获得如此多的触摸事件,并且您每秒只能在屏幕上绘制一定次数。我们来做一些数学。

假设您可以在166ms内对角移动整个屏幕(快速滑动)。假设您正在渲染足够的粒子以使设备从60 FPS减速到30 FPS(每个渲染周期33ms)。这意味着您只需要在刷屏幕时获得大约5次触控回调。反过来,这意味着您只需每100个像素触摸一次触摸事件,即手指移动。

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

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