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