延迟触摸事件

时间:2008-11-03 16:31:40

标签: iphone cocoa-touch core-animation

我们在AppStore中有一个应用Bust~A~Spook我们遇到了问题。当您点击屏幕时,我们使用CALayer在动画中找到所有视图的位置,如果您点击一个,我们就会开始一个骰子序列。但是,有一个明显的延迟,似乎触摸缓冲,我们收到事件到很晚。有没有办法进行民意调查或更好的方式来回应触摸以避免这种滞后时间?

这是在UIView而不是UIScrollView

4 个答案:

答案 0 :(得分:4)

您使用UIScrollView来托管所有这些吗?有一个名为delaysContentTouches的属性。默认为YES,这意味着视图在传递之前尝试确定触摸是否是滚动手势。您可以尝试将此设置为NO并查看是否有帮助。

答案 1 :(得分:1)

这是关于季节性应用程序的相当老的帖子,所以OP可能还没有解决这个问题,但是如果其他人遇到同样的问题并且觉得这很有用。

我同意Kriem的看法,CPU过载是触摸处理显着延迟的常见原因,尽管在必须拔出OpenGL之前可以做很多优化。 CALayer针对您在此处描述的各种问题进行了很好的优化。

首先要检查基础知识:

  • CALayers已添加到主视图的layer
  • touchesBegan:withEvent:在主视图中实施
  • 当阶段为UITouchPhaseBegan时,您在主视图的hitTest:上调用layer以找到相应的子图层
  • 模具序列从相关模型对象开始,更新图层。

然后,我们可以使用Instruments检查性能。确保您的CPU没有过载。在模拟器中一切运行良好但在设备上有问题吗?

您尝试解决的问题非常常见,因此您不应期望需要复杂或棘手的解决方案。设计或实施很可能存在基本缺陷,只需要进行故障排除。

答案 2 :(得分:0)

延迟触摸通常表示CPU过载。使用NSTimer进行基于帧到帧的操作很容易干扰触摸处理。

如果你的应用就是这种情况,那么我的建议非常简单:OpenGL。

答案 3 :(得分:0)

如果您在进行点击测试的同时进行CALayer s的任何核心动画动画,则必须在调用{{1}之前获取presentationLayer },因为模型图层的位置不会反映屏幕上的内容,而是图层动画的位置。

希望有所帮助。