2016-03-15 2 views
1

Я создал базовое приложение с секундомером на нем. Он запускает 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 

} 
+0

NSTimer - не работает для фона. – tktsubota

ответ

1

Вы не можете использовать NSTimer в фоновом режиме, и ваше приложение не будет работать долго в любом случае.

Когда приложение входит в фон, вы должны остановить таймер и принять к сведению текущее время. Затем, когда приложение возобновляется снова, вы должны перезапустить таймер и рассчитать, сколько времени приложение было в фоновом режиме для обновления дисплея соответствующим образом.

+0

Итак, если я создаю переменную для записи текущего времени и запускаю этот код, когда пользователь нажимает кнопку запуска. При включении приложения по умолчанию они недействительны для таймера. Затем на applicationwillenterforeground минус текущее время из сохраненного времени в переменной, а затем записывать это на метку и перезапускать nstimer. Звучит ли это правильно? –

+0

Да, это звучит хорошо. – Michael

Смежные вопросы