秒表在后台睡眠模式下运行

时间:2016-03-15 00:11:36

标签: ios swift nstimer

我已经建立了一个带秒表的基本应用程序。它运行3个按钮 - 在导航栏上播放,暂停和重置,写入名为timerLabel的标签。

问题是,只要应用程序关闭或iPhone进入睡眠模式,秒表就会停止。我在其他问题中寻找答案,似乎唯一的方法是记录应用程序关闭时的实际时间并记录重新唤醒并比较差异的时间 - 然后将其写入标签

麻烦是我完全不知道如何将其纳入我当前的代码中。我甚至不知道如何抽出时间。这是我的视图控制器中的代码。

func updateTimer() {

    time++

    updateTimeDisplay()

}

func secondsToHoursMinutesSeconds (seconds : Int) -> (Int, Int, Int) {
    let h = seconds / 3600
    let m = (seconds % 3600) / 60
    let s = (seconds % 60)
    return (h, m, s)
}

func pauseTimer() {
    timer.invalidate()
}

func startTimer() {
    if !timer.valid {
    timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("updateTimer"), userInfo: nil, repeats: true)        }
    else {
    print("The Stopwatch has already started!")
    }
}

func resetTimer() {
    time = 0
    timer.invalidate()
    updateTimeDisplay()

}

func updateTimeDisplay() {

    let (h, m, s) = secondsToHoursMinutesSeconds(time)
    let timeToDisplay = String(format:"%02d:%02d:%02d", h, m, s)
    timerLabel.text  = timeToDisplay

}

1 个答案:

答案 0 :(得分:1)

您无法在后台使用NSTimer,并且您的应用无论如何都不会在那里长时间运行。

当应用程序进入后台时,您应该停止计时器并记下当前时间。然后当应用程序再次恢复时,您应该重新启动计时器,并计算应用程序在后台运行多长时间以相应地更新显示。