2012-04-05 3 views
0

Я создал таймер обратного отсчета, и он отлично работает. Но когда он достигает нуля, он продолжает отсчет .. поэтому он показывает -1, -2, -3 и т. Д. Как это предотвратить? от этого?Предотвращение обратного отсчета в негативы

Это мой код из файла реализации ..

@implementation ViewController 

-(IBAction)start { 

    myTicker = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showActivity) userInfo:nil repeats:YES]; 
} 

-(IBAction)stop { 
    [myTicker invalidate]; 
} 

-(IBAction)reset { 
    time.text = @"0"; 
} 

-(void)showActivity { 
    int currentTime = [time.text intValue]; 
    int newTime = currentTime -1; 
    time.text = [NSString stringWithFormat:@"%d", newTime]; 
} 

Я предполагаю, что я пропускаю некоторый код где-нибудь?

ответ

0

Быстрое исправление для изменения:

int newTime = currentTime - 1; 

в:

int newTime = (currentTime > 0) ? currentTime - 1 : 0; 

Это остановит таймер обратного отсчета от опуститесь ниже нуля. Если это все, что вам нужно, этого должно быть достаточно.


Это не будет выключить таймер или выполнить действие, когда оно достигает нуля. Для этого вам нужно добавить что-то вроде следующего блока после того выше линии:

if ((currentTime > 0) && (newTime ==0)) { 
    // optionally turn off timer 
    fireZeroEvent(); 
} 

и обеспечивают функцию fireZeroEvent() делать все, что вам нужно сделать.

Я говорю необязательно выключить таймер, так как вы можете оставить это работает, так что вы можете перезапустить отсчет времени, просто быть установка time.text и без необходимости заново таймер.

По этой причине fireZeroEvent() вызывается только при переходе от 1 до 0, а не каждый раз, когда таймер срабатывает после достижения нуля.

+0

Это создает ошибки для меня :( – user1253207

+0

@ user1253207: извините, я неправильно набранный - это первый ':' должен был '' - попробуйте еще раз – paxdiablo

+0

благодаря спариванию она работала сейчас :) – user1253207

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