在 Swift 的后台继续一个计数器



我正在创建一个秒表,它使用 NSTimer 和表格视图来跟踪用户创建的圈数。当秒表正在运行并且我与表视图交互(滚动(时,秒表停止计数。一旦我停止与表视图交互,秒表就会从它停止的地方继续,而不是好像它从未停止计数一样。这不仅仅是模拟器问题;我把它放在我的iPad上,同样的事情发生了。如何在应用程序后台保持秒表计数或防止它像这样暂停?提前谢谢。

您可以将计时器添加到应用程序 runLoop,以便在与 UI 交互时计数器将继续。只需在创建计时器后添加以下内容:

RunLoop.current.add(timer, forMode: RunLoopMode.commonModes)

简短的回答是你不能。计时器在主线程上运行,如果应用在"触发日期"过后忙于执行某些操作,则会跳过计时器的发生。

不要使用重复计时器和计数器来计算已过的时间量,而是记录要开始计时的时间,然后计算计时器每次触发时经过的时间量。像这样:

@class myViewController: UIViewController {
    var startTime: TimeInterval
    weak var timer: Timer?

    func startTimer() {
      startTime = Date().timeintervalSinceReferenceDate
      timer = Timer.scheduledTimer...
    }
    func timerFired(_ timer: Timer) {
       let elapsedTime = Date().timeintervalSinceReferenceDate - startTime
    }
}

相关内容

最新更新