Ios UITableView滚动时,UITableView单元格动画停止

Ios UITableView滚动时,UITableView单元格动画停止,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我正在我的应用程序中制作一个“事件倒计时”场景,该场景使用UITableViewController显示未来发生的事件列表。在每个单元格中,我都有一个倒计时计时器,可以倒计时直到事件发生 我想设置这些倒计时字段的动画,以便它们实时倒计时。我已经实现了这个动画,但问题是当用户滚动uitableview时,动画会暂停,直到用户释放滚动。我希望动画即使在滚动时也能继续 我制作动画的方法是每隔0.25秒在NSTimer上调用[self.tableview reloadData](我知道这不是最有效的方

我正在我的应用程序中制作一个“事件倒计时”场景,该场景使用UITableViewController显示未来发生的事件列表。在每个单元格中,我都有一个倒计时计时器,可以倒计时直到事件发生

我想设置这些倒计时字段的动画,以便它们实时倒计时。我已经实现了这个动画,但问题是当用户滚动uitableview时,动画会暂停,直到用户释放滚动。我希望动画即使在滚动时也能继续

我制作动画的方法是每隔0.25秒在NSTimer上调用[self.tableview reloadData](我知道这不是最有效的方法,这更多的是测试动画本身)。我还尝试在UITableViewCell本身中运行一个调用视图更新的NSTimer,但在滚动时动画仍会暂停


有人知道在滚动时调用动画的设置或替代方法吗?

我猜您正在使用视图存储倒计时数据。相反,创建一个倒计时模型,可以用开始日期(NSDate)和持续时间(NSTimeInterval)初始化它。然后根据计时器更新这些倒计时对象,而不是视图。当一个tableview单元格在视图中可见时,它将从相应的倒计时对象加载数据,一切都将顺利运行。

在UIScrollViews的同一问题上进行了更多的搜索,我找到了这篇文章

基本上,我使用的NSTimer在滚动时没有被更新,因为滚动会阻止它自己的运行循环模式之外的一切。修复方法是将动画NSTimer添加到滚动使用的相同运行循环模式:NSRunLoopCommonModes

下面是如何在代码中执行此操作:

NSTimer *timer = [NSTimer timerWithTimeInterval:0.25 self selector:@selector(updateCountdownLabels) userInfo:nil repeats:YES]; 
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

Hrmm,您可以在每次滚动视图时
[self.tableview reloadData]
UITableViewDelegate
extends
UIScrollViewDelegate
。是否重复使用单元格?@nhgrif这样重新加载数据在计算上太昂贵了?@quaertym是的,我正在重复使用单元格。@happlii我不知道。把它放进去,运行,然后找出答案。不幸的是,这不起作用。我认为发生的情况是,当tableview滚动时,UITableViewCell正在阻止所有绘制自身的调用。因此,即使计时器的模型仍在后台更新,视图也不会刷新,直到滚动完成。此外,请注意,对于
performSelector
方法,同样的解决方案,例如:
[self-performSelector:SEL with object:nil afterDelay:delay in modes:@[nsrunlopmonmodes]