我正在使用Swift编写一个Timer-App作为我的第一个Cocoa-Application并遇到了问题。我使用自定义视图来显示剩余时间。它工作正常,但当我按下其中一个按钮时,重绘停止,直到我释放按钮。我想这是我使用NSTimer触发视图绘制的方式,这似乎会干扰运行循环。
点击开始按钮时,会记录当前时间。
startTime = NSDate()
timer = NSTimer.scheduledTimerWithTimeInterval(0.05, target: self,
selector: "update", userInfo: nil, repeats: true)
在更新方法中,计算经过的时间并将其存储在视图控制器中由KVO监视的属性中。视图被告知要重绘。
timerView.needsDisplay = true
更新视图的正确方法是什么?
答案 0 :(得分:0)
您只需将计时器添加到mainRunLoop以获取模式NSRunLoopCommonModes:
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
答案 1 :(得分:0)
按下按钮时会出现动画,停止主线程上的所有其他动画/绘图。
为什么不在后台线程上运行计时器异步,因此它不会受到主线程交互的影响。
查看NSOperation