0

我在 NSTimer 触发的主窗口上有一个 OpenGL 动画绘图。如果我打开一个带有可滚动 UITableView 菜单的弹出窗口,动画会在滚动过程中冻结。一旦滚动动画停止,计时器回调就会重新开始。只有当用户主动尝试滚动时,主窗口才会停止更新。

似乎 Apple 的滚动动画以某种方式阻止了主循环上的调度。这是真的吗?有办法解决吗?

如果我能提供帮助,我真的不想引入多线程,因为这会成倍地增加我的代码的复杂性。

我也尝试使用 CADisplayLink 而不是 NSTimer 并且显示链接调用也被滚动动画阻止。

4

2 回答 2

0

NSTimer 与运行循环和模式相关联。在事件跟踪期间,模式为UITrackingRunLoopMode。默认情况下,由创建的计时器scheduledTimerWithTimeInterval被添加,NSDefaultRunLoopMode因此在跟踪期间不会触发。

[[NSRunLoop currentRunLoop] addTimer:yourTimer forMode:UITrackingRunLoopMode];
于 2014-12-05T20:43:41.127 回答
0

正如 bdesham 所回答的,“Apple 的第一要务是 UI 响应能力,因此在这种情况下,UI 操作会阻塞代码的其他部分。您需要将计时器移至另一个线程。”

于 2014-10-20T21:40:52.600 回答