NSTimer似乎被MKMapView平移放慢了速度?

时间:2015-04-04 13:18:24

标签: ios objective-c swift timer

UIViewController中,我计划使用NSTimer方法每1秒启动scheduledTimer,因此我可以每秒更新视图中的UILabel。但问题是,每当我在NSTimer内部的MKMapView内移动时,UIView触发似乎都会延迟。因此,延迟导致UILabel不能均匀更新,这是不好看的。由MKMapView淘汰造成的延迟是否会占用太多资源?我如何安排NSTimer,以便没有延迟,但我平移了MKMapView? (但请注意,我没有在某种后台线程上安排NSTimer,它位于主线程中。)谢谢。

1 个答案:

答案 0 :(得分:3)

如果您使用scheduledTimerWithTimeInterval(...)创建计时器,它将以模式NSDefaultRunLoopMode添加到当前的runloop。当您的应用程序忙于事件跟踪时,即在UIScrollView中滚动或者与UI进行任何其他交互时,计时器不会触发。

您可以创建未安排的NSTimer并自行将其添加到runloop,如果您使用NSRunLoopCommonModes作为模式,计时器将在您与用户界面交互时触发。

let timer = NSTimer(timeInterval: 1.0, target: self, selector: Selector("timerFired:"), userInfo: nil, repeats: true)
NSRunLoop.currentRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)

有关详细信息,问题NSDefaultRunLoopMode vs NSRunLoopCommonModes包含有关不同runloop模式的很好的解释。