TableView 交互阻止单元格中的动画

Posted

技术标签:

【中文标题】TableView 交互阻止单元格中的动画【英文标题】:TableView interaction blocking animations in cells 【发布时间】:2012-12-08 18:33:18 【问题描述】:

我在 tableview 单元格中有一个进度指示器,当用户与 tableview 交互时,它不会更新其进度。当交互停止时,指示器会跳转到它应该在的位置。

如何避免这种情况,即使用户正在滚动 tableview,动画也会继续?

可以将它们添加到运行循环中吗?如果交互和动画都需要在主线程上发生,可以做些什么变通?

【问题讨论】:

【参考方案1】:

首先,您应该确保您确实希望更新这些进度指示器 - 滚动时 UIScrollView 类型类的默认行为是暂停其中的任何 UI 更新以保持响应。我发现,当我尝试做任何额外的事情时,滚动速度之类的东西会以惊人的速度下降,尤其是在旧设备上。

除了警告,我们该怎么做?好吧,它看起来像this question has a solution for you。一个简短的总结是:

滚动将运行循环放入UITrackingRunLoopMode 当 runloop 处于此模式时,您的更新代码不会触发 解决方案:让NSTimer 触发您的进度指示器更新,在NSRunLoopCommonModes 中运行该计时器,这样它在滚动时仍会触发。

就是这样。 UIView 滚动时更新不是问题,运行触发更新的代码才是。通过使用“防滚动”的计时器,您的指标应该会更新得很好。 linked question, so do click through to read 有一些很好的示例代码!

【讨论】:

非常感谢,我去看看。

以上是关于TableView 交互阻止单元格中的动画的主要内容,如果未能解决你的问题,请参考以下文章

弹出键盘时如何为 UITableView 设置动画?

动画在具有动态单元格高度的单元格中添加子视图

在tableView中选择多个单元格并将另一个tableView单元格中的选定单元格显示为标签?

Swift:Tableview 中特定单元格中的 addSublayer 不是每个单元格

如何在可重用的 tableView 单元格中更新 UITextfield 中的文本值,每个单元格中的值不同

尝试快速从数组中删除时,不应删除 tableview 单元格中的最后一个单元格