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