2013-07-25 3 views
3

У меня есть простой таймер, который активируется нажатием кнопки. Он работает от 60 до 0 без проблем, но я хочу остановить и сбросить таймер на кнопку. Мне удалось остановить его, когда кнопка нажата, используя код ниже, но по какой-то причине не может заставить его сбросить и остановить на 60. Это должно быть просто, но оно не работает. Какие-либо предложения?Стоп и сброс NSTimer

Таймер устанавливается с помощью простой операции

- (IBAction)timerStart:(id)sender { 

if(!secondCounter == 0){ 
     [countdownTimer invalidate]; 
    } 
    else { 
      [self setTimer]; 
    } 
} 

КОД ДЛЯ ТАЙМЕРА

- (void)timerRun { 
    secondCounter = secondCounter - 1; 
    int minutes = secondCounter; 

    NSString *timerOutput = [NSString stringWithFormat:@"%d", minutes ]; 
    countDownLabel.text = timerOutput; 

    if(secondCounter == 0){ 
     [countdownTimer invalidate]; 
     countdownTimer = nil; 
    } 
} 

- (void)setTimer { 
    secondCounter = 60; 
    countdownTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerRun) userInfo:nil repeats:YES]; 

} 
+0

Спасибо .. Он работал для меня – Aayushi

ответ

2

Что вы имеете в виду, чтобы остановить таймер? Таймер не остановится. Вы хотели бы иметь countDownLabel.text, чтобы показать 60? Когда вы аннулируете таймер, он перестанет работать и вызовет метод timerRun. Если вы хотите перезапустить таймер, просто вызовите функцию setTimer. Я думаю, что вы имели в виду countDownLabel.text = @"60" после [countdownTimer invalidate];, и когда вы снова нажмете кнопку, таймер запустится снова и изменит метку. Дайте мне знать, если это то, что вы искали.

Как христианин сказал, что вы должны сбросить secondCounter

secondCounter = 0; 
+0

Привет @Yan. В настоящее время он делает недействительным таймер, как ожидалось, и с использованием кода, который вы предложили, возвращает значение до 60. Однако, когда я нажимаю кнопку снова, он не перезапускает таймер. Вместо этого это мертвая кнопка. Есть предположения? Должно быть в моем коде 'if'. – memyselfandmyiphone

+0

Спасибо только моей логике, которая была испорчена – memyselfandmyiphone

6

Вы должны установить секунды до 0, в противном случае вы всегда аннулирует таймер, но никогда не запустить его снова:

- (IBAction)timerStart:(id)sender { 
    if(!secondCounter == 0) { 
     [countdownTimer invalidate]; 
     secondCounter = 0; 
    } 
    else { 
     [self setTimer]; 
    } 
} 
+0

Спасибо, христианин. Я принял ответ Яна, поскольку использовал обе части его ответа, хотя твоя помощь была полезной. Я поддержал. – memyselfandmyiphone

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