【发布时间】:2017-07-29 21:36:06
【问题描述】:
对不起,如果这是一个新手问题,我对 iOS 和 Swift 很陌生。 我有一个计时器,我知道我可以使用“CADisplayLink”,但是如果我使用它,我的计时器中的毫秒数会像 1、3、7... 67、71... 我不需要这个,我需要 1, 2, 3, 4, 5 ... 54, 55, 56 , 57... iPhone 7、iPhone 7 Plus、iPhone 5 的功能还不错,但是在 iPhone SE、iPad Retina、iPad Pro、iPad Air 中定时器太慢了,所以基本上定时器是歪斜的。
计时器的运行不如默认计时器应用程序中的计时器好(FPS 问题?)
每一步我都需要毫秒:
func updateStopwatch() {
milliseconds += 1
print(milliseconds)
if milliseconds == 100 {
milliseconds = 0
seconds += 1
}
let millisecondsString = milliseconds > 9 ?"\(milliseconds)" : "0\(milliseconds)"
let secondsString = seconds > 9 ?"\(seconds)" : "\(seconds)"
stopWatchString = "\(secondsString).\(millisecondsString)"
labelTimer.text = stopWatchString
}
@IBAction func startStopButtonTapped(_ sender: Any) {
if isTimerRunning {
isTimerRunning = !isTimerRunning
timer = Timer.scheduledTimer(timeInterval: 0.001, target: self, selector: #selector(updateStopwatch), userInfo: nil, repeats: true)
}else{
isTimerRunning = !isTimerRunning
timer.invalidate()
}
}
【问题讨论】:
-
两个厘米。 1) 无论如何,显示器的更新速度不会那么快,所以不要担心在计时器运行时显示那么多数字。 2)计时器不是那么准确。不能保证在您要求的时间间隔内调用它,尤其是对于像
0.001这样小的值。相反,您应该在启动计时器时读取时钟读数,然后在每个 tick 处计算当时的差值并更新显示。 -
这里有很好的信息:stackoverflow.com/q/31375361/1630618