iOS 解决NSTimer在UITableView滑动中暂停问题

来源:互联网 发布:程序员示爱网页源代码 编辑:程序博客网 时间:2024/05/22 09:42

最近在研究动画特效。发现将NSTimer动画添加到tableVIew上的时候会遇见动画暂停的问题,其实是动画的计时器停止了,经过研究找到了解决方法, 和大家分享一下。

当你使用下面这个方法创建NSTimer的时候

class func scheduledTimer(timeInterval ti: TimeInterval, target aTarget: Any, selector aSelector: Selector, userInfo: Any?, repeats yesOrNo: Bool) -> Timer

在tableview滑动时timer就是显示暂停,原因是timer的这个简便构造方法把timer加入了NSRunLoopDefaultMode上,而tableview在滑动时只会处理UITrackingRunLoopMode,也就是说当前的RunLoop并没有功夫处理timer事件。


解决的方法是将timer绑定到NSRunLoopCommonModes上,通过以下方法构造timer:

init(timeInterval ti: TimeInterval, target aTarget: Any, selector aSelector: Selector, userInfo: Any?, repeats yesOrNo: Bool)

通过以下方法将构造的timer绑定到NSRunLoopCommonModes上:

RunLoop.current.add(timer, forMode: RunLoopMode.commonModes)

这样timer在tableview滑动中就不会暂停了。

当然这样做也不是100%能解决问题,有时timer计时不准确。具体的解决方法可以参考这个:

http://blog.csdn.net/martin_liang/article/details/40783057

但是像我这样做动画、对时间精确度要求不高的,倒是可以用这个方法解决问题。

阅读全文
1 0
原创粉丝点击