定期触发重绘自定义视图

时间:2015-02-19 17:28:53

标签: macos cocoa swift drawing custom-view

我正在使用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

更新视图的正确方法是什么?

Custom View

2 个答案:

答案 0 :(得分:0)

您只需将计时器添加到mainRunLoop以获取模式NSRunLoopCommonModes:

NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)

答案 1 :(得分:0)

按下按钮时会出现动画,停止主线程上的所有其他动画/绘图。

为什么不在后台线程上运行计时器异步,因此它不会受到主线程交互的影响。

查看NSOperation