我在 tableview 单元格中有一个进度指示器,当用户与 tableview 交互时,它不会更新它的进度。当交互停止时,指示器跳转到它应该在的位置。
如何避免这种情况,以便即使用户正在滚动表格 View ,动画也会继续?
可以将它们添加到运行循环中吗?如果交互和动画都需要在主线程上发生,可以做些什么工作?
最佳答案
首先,您应该确保您确实希望这些进度指示器更新 - UIScrollView
类型类在滚动时的默认行为是暂停其中的任何 UI 更新以保持响应。我发现每当我尝试做任何额外的事情时,滚动速度之类的东西都会以惊人的速度下降,尤其是在旧设备上。
撇开警告不谈,我们如何做到这一点?好吧,它看起来像this question has a solution for you .一个简短的总结是:
- 滚动将运行循环放在 UITrackingRunLoopMode 中
- 当运行循环处于这种模式时,您的更新代码不会触发
- 解决方案:让
NSTimer
触发进度指示器更新,在NSRunLoopCommonModes
中运行该计时器,这样它在滚动时仍会触发。
就是这样。 UIView
滚动时更新不是问题,运行触发更新的代码才是问题。通过使用“防滚动”的计时器,您的指标应该可以正常更新。 linked question, so do click through to read 中有一些很好的示例代码!
关于objective-c - TableView 交互阻止单元格中的动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13780541/