定期触发重绘自定义视图

Periodically trigger redrawing custom view

我正在编写一个计时器应用程序作为我的第一个 Cocoa-应用程序,使用 Swift 和 运行 解决了一个问题。我使用自定义视图来显示剩余时间。它工作正常,但是当我按下其中一个按钮时,重绘停止,直到我松开按钮。我想这与我使用 NSTimer 触发视图绘制的方式有关,这似乎干扰了 运行-loop.

按下开始按钮时,记录当前时间。

startTime = NSDate()
timer = NSTimer.scheduledTimerWithTimeInterval(0.05, target: self,
            selector: "update", userInfo: nil, repeats: true)

在更新方法中,经过的时间被计算并存储在 属性 中,它由视图控制器中的 KVO 监视。告诉视图重绘的地方。

timerView.needsDisplay = true

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

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

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

当您按下按钮时,会出现一个动画,停止主线程上的所有其他 animations/drawings。

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

看看NSOperation