2016-01-20 2 views
1

Моя раскадровка выглядит следующим образом: MainNavViewController -> TimerViewControllerSwift: Как начать NSTimer раз ViewController открыт

TimeViewController содержит NSTimer и код, который управляет его.

NSTimer должен АВТОМАТИЧЕСКИ начать обратный отсчет после открытия TimerViewController.

Таймер должен отсчет времени с 02:00 до 00:00.

Таймер необходим только в указанном ViewController, а не в следующем или перед ним.

В настоящее время у меня есть код ниже:

var timer = NSTimer() 
let timeInterval:NSTimeInterval = 0.05 
let timerEnd:NSTimeInterval = 0.0 
var timeCount:NSTimeInterval = 120.0 

func timerDidEnd(timer:NSTimer){ 
    timeCount = timeCount - timeInterval 
    if timeCount <= 0 { 
    TimerLabel.text = "Time's Up!" 
    timer.invalidate() 
    } 
} 

func timeString(time:NSTimeInterval) -> String { 
    let minutes = Int(time)/60 
    let seconds = time - Double(minutes) * 60 
    return String(format:"%02i:%02i",minutes,Int(seconds)) 
} 

func StartTimer() { // Function called in viewDidLoad 
    if !timer.valid{ 
    TimerLabel.text = timeString(timeCount) 
    timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval, 
    target: self, 
    selector: "timerDidEnd:", 
    userInfo: nil, 
    repeats: true) 
    } 
} 

ОДНАКО, код не будет работать и timerLabel просто установить в 02:00 БЕЗ бега (отсчет).

+0

Возможный дубликат [Swift: NSTimer автоматически заканчивается без отсчитывать] (http://stackoverflow.com/questions/34867661/swift -nstimer-automatic-ends-without-counting-down) – Jonah

+0

Похоже, вы боретесь с несколькими проблемами сразу же здесь по нескольким вопросам. Я думаю, тебе будет больше удачи, если ты займешься за один раз. Знаете ли вы, что эта реализация таймера работает, можете ли вы подсчитать ее в ответ на нажатие кнопки, как в следующем примере? Если это так, то для запуска поведения, когда появляется представление 'UIViewController', посмотрите на метод' -viewDidAppear: 'на' UIViewController' и как вы можете его переопределить. – Jonah

+0

Да, я также разместил этот вопрос. Однако на него не ответил. – mjoe7

ответ

3

Вы забыли установить текст каждый раз, когда функция таймера называется

func timerDidEnd(timer:NSTimer){ 
    timeCount = timeCount - timeInterval 
    if timeCount <= 0 { 
     TimerLabel.text = "Time's Up!" 
     timer.invalidate() 
    // Start edit 
    } else { 
     TimerLabel.text = timeString(timeCount) 
    } 
    // End edit 
} 
+0

Возможно, было бы лучше разместить обновление без конца ярлыка в 'if timeCount <= 0', но да, похоже, это ответ. –

+0

@TomHeard достаточно честный, я сделаю это редактирование – tbondwilkinson

+0

Спасибо! Оно работает! Кажется, что я только что пропустил текст TimerLabel. Я высоко ценю вашу помощь @tbondwilkinson – mjoe7