【问题标题】:Timer not synced定时器未同步
【发布时间】: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

标签: ios swift timer


【解决方案1】:

没有理由每毫秒更新屏幕。如果您真的需要计时器如此快速地触发,您需要在此处进行一些优化。首先尝试每 40 甚至 100 毫秒更新 labelTimer.text (并为此计算字符串),用户体验没有区别。

P.S.:第四行有错字:你需要一千,而不是一百。

【讨论】:

  • 谢谢,但我需要在我的应用程序中确保每一步都以毫秒为单位。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
相关资源
最近更新 更多