我正在我的应用中制作一个“事件倒计时”场景,该场景使用UITableViewController来显示将来发生的事件列表。在每个单元格中,我都有一个倒计时器,可以计算事件发生前的时间。
我想动画这些倒计时字段,以便实时记下这些字段。我已经实现了这个动画,但问题是当用户滚动uitableview时动画暂停,直到用户释放滚动。我希望动画即使在滚动时也能继续。
我动画的方式是每隔0.25秒在NSTimer上调用[self.tableview reloadData](我知道这不是最有效的方法 - 这更像是测试动画本身)。我还尝试在UITableViewCell本身内运行NSTimer调用视图更新 - 但滚动时仍然会暂停动画。
任何人都知道调用动画的设置或替代方式,以便在滚动时保持运行状态吗?
答案 0 :(得分:10)
对UIScrollViews的同一问题进行了更多的搜索,这让我发表了这篇文章My custom UI elements...
基本上发生的事情是我正在使用的NSTimer在滚动时没有被更新,因为滚动阻止了它自己的运行循环模式之外的所有内容。修复是将动画NSTimer添加到滚动使用的相同运行循环模式:NSRunLoopCommonModes
以下是如何在代码中执行此操作:
NSTimer *timer = [NSTimer timerWithTimeInterval:0.25 self selector:@selector(updateCountdownLabels) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
答案 1 :(得分:-1)
我猜您正在使用视图来存储倒计时数据。而是创建倒计时模型,可以使用开始日期(NSDate)和持续时间(NSTimeInterval)进行初始化。然后根据计时器而不是您的视图更新那些倒计时对象。当一个tableview单元格在视图中变得可见时,它将从相应的Countdown对象加载数据,一切都应该顺利运行。