继续在斯威夫特的背景中的反击

时间:2017-03-22 15:54:43

标签: ios swift uitableview

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

2 个答案:

答案 0 :(得分:0)

简短的回答是,你不能。计时器在主线程上运行,如果你的应用程序在“开火日期”过去时忙于做某事,则会跳过该计时器的发生。

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

@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
    }
}

答案 1 :(得分:0)

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

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