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

最近在研究动画特效。发现将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
但是像我这样做动画、对时间精确度要求不高的,倒是可以用这个方法解决问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容