【发布时间】:2013-03-02 03:28:32
【问题描述】:
我在 NSTimer 触发的主窗口上绘制了一个 OpenGL 动画。如果我打开一个带有可滚动 UITableView 菜单的弹出窗口,动画会在滚动过程中冻结。一旦滚动动画停止,计时器回调就会重新开始。只有当用户主动尝试滚动时,主窗口才会停止更新。
Apple 的滚动动画似乎以某种方式阻止了主循环上的调度。这是真的吗?有办法解决吗?
如果可以的话,我真的不想引入多线程,因为这会成倍地增加我的代码的复杂性。
我还尝试使用 CADisplayLink 而不是 NSTimer 并且显示链接调用也被滚动动画阻止。
【问题讨论】:
-
Apple 的第一要务是 UI 响应能力,因此在这种情况下,UI 操作会阻塞代码的其他部分。您需要将计时器移至另一个线程。
-
你必须用计时器做动画吗?为什么不使用 UIView animateWithDuration?
-
它用于 OpenGL 绘图的动画,而不是视图。
-
UI 是线程#1,永远不应该被阻塞。在回答您的问题之前,您必须决定线程#1 上的内容:动画或滚动。您将不得不将其中一个移动到另一个线程。但请先做出决定,我们可以提供帮助。
标签: ios animation scroll nstimer cadisplaylink