我正在尝试在我的应用程序中实现秒表,但我注意到它实际上运行得比应该慢。这是代码:
timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(display), userInfo: nil, repeats: true)
func stringFromTimeInterval(interval: TimeInterval) -> NSString {
let ti = Int(interval)
let minutes = ti / 6000
let seconds = ti / 100
let ms = ti % 100
return NSString(format: "%0.2d:%0.2d.%0.2d",minutes,seconds,ms)
}
@objc func display() {
interval += 1
lapInterval += 1
timeLabel.text = stringFromTimeInterval(interval: TimeInterval(interval)) as String
lapLabel.text = stringFromTimeInterval(interval: TimeInterval(lapInterval)) as String
}
希望我已经包含了足够的信息。提前谢谢!
答案 0 :(得分:0)
不要试图运行一个每百分之一秒触发的计时器,然后计算它发射的次数。计时器不准确。它们的分辨率更像是50-100毫秒(0.05到0.1秒),并且由于计时器在主线程上触发,它取决于您经常为事件循环提供服务的代码。如果你遇到一段耗时的代码并且没有返回,那么计时器就不会被激活。
另外,iOS上的屏幕刷新是每1/60秒。由于您无法更快地显示更改,因此更频繁地运行计时器毫无意义。
每隔1/30运行一次计时器,并计算每次发射时的经过时间,如下所述:
要计算已用时间,请记录您想要开始计时的时间(Date()
或Date().timeIntervalSinceReferenceDate
),然后每次要更新时,计算' new_date - old_date&# 39 ;.结果将是已经过的秒数,并且精确且精度为Double
。