Использование NSTimer в цикле - PullRequest
0 голосов
/ 04 января 2011

Мне нужно показать таймер обратного отсчета от 30 до 0, несколько раз.(От 30 до 0, начало с 30, и т. Д.) Однако, когда я поместил его в цикл for, вместо ожидания, пока таймер не сделает недействительным запуск следующего таймера, цикл повторяется и создается несколько таймеров.

Как создать цикл, который ожидает, пока таймер не станет недействительным?

- (IBAction)startCountdown:(id)sender {</p> <pre> NSNumber *rounds = [[NSNumber alloc]initWithInt:sliderRounds.value]; for (int i = rounds.intValue; i > 0; i--) { [self timer]; }

Ответы [ 3 ]

5 голосов
/ 04 января 2011

Вы можете использовать scheduleTimerWithTimeInterval

[NSTimer scheduledTimerWithTimeInterval: 0.5
             target: self
             selector: @selector(handleTimer:)
             userInfo: nil
             repeats: NO];

А внутри handleTimer вы создаете следующий таймер

0 голосов
/ 04 января 2011

Что вы можете сделать, это следующее:

  • Создайте класс, который содержит NSTimer
  • В этом классе будет переменная для хранения количества раз, которое ему нужно считать
  • В конце одного таймера (и действительно, единственного), он уменьшает счет

Вы можете повторить NSTimer, вызвав его с:

[NSTimer scheduledTimerWithTimeInterval:30.0f
                             target:self 
                           selector:@selector(timerFired)
                           userInfo:nil
                            repeats:YES];

В методе с именем - (void)timerFired вы уменьшите счетчик. Если он достигнет нуля, вы остановите таймер.

Надеюсь, это поможет!

0 голосов
/ 04 января 2011

Похоже, вы вызываете какой-то метод с именем 'timer' для себя. Что оно делает? Создает новый таймер? Тогда вот почему. Когда таймер создан, он не блокируется. Вместо этого вызов метода планируется и выполняется после истечения времени ожидания таймера.

...