2

我们在 AppStore Bust~A~Spook中有一个应用程序,我们遇到了问题。当您点击屏幕时,我们使用 CALayer 在动画期间查找所有视图的位置,如果您点击其中一个,我们将启动一个骰子序列。但是,有一个明显的延迟,看起来好像触摸被缓冲了,我们收到事件的时间很晚。有没有办法轮询或任何更好的方法来响应触摸以避免这种滞后时间?

这是在 UIView 而不是 UIScrollView

4

4 回答 4

4

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

于 2008-11-03T16:38:05.810 回答
1

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

我同意 Kriem 的观点,即 CPU 过载是触摸处理显着延迟的一个常见原因,尽管在不得不退出 OpenGL 之前可以进行很多优化。CALayer 针对您在此处描述的各种问题进行了很好的优化。

我们应该首先检查基础知识:

  • CALayers 添加到主视图的layer
  • touchesBegan:withEvent:在主视图中实现
  • 当相位为UITouchPhaseBegan时,您调用hitTest:主视图layer以找到适当的子层
  • 芯片序列从相关模型对象开始,更新层。

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

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

于 2009-05-12T12:48:59.407 回答
0

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

如果您的应用程序是这种情况,那么我的建议很简单:OpenGL。

于 2009-05-08T14:11:06.880 回答
0

如果您在进行CALayer命中测试的同时对 s 进行任何类型的核心动画动画,则必须presentationLayer在调用之前获取hitTest:,因为模型层的位置不会反映屏幕上可能出现的内容,但是图层动画的位置。

希望有帮助。

于 2009-05-28T00:33:36.520 回答