Ответ 1
Вы не можете приостановить таймер без использования invalidate
. Что вы можете сделать, это добавить
[timer fire];
после создания таймера в startTimer
.
Я пытаюсь создать функциональность типа "секундомер". У меня есть одна метка (для отображения прошедшего времени) и две кнопки (запуск и останов таймера). Кнопки пуска и останова вызывают функции startTimer
и stopTimer
соответственно. Каждую секунду таймер срабатывает и вызывает функцию increaseTimerCount
. У меня также есть ivar timerCount
, который удерживается в течение прошедшего времени в секундах.
- (void)increaseTimerCount
{
timerCountLabel.text = [NSString stringWithFormat:@"%d", timerCount++];
}
- (IBAction)startTimer
{
timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(increaseTimerCount) userInfo:nil repeats:YES];
}
- (IBAction)stopTimer
{
[timer invalidate];
[timer release];
}
Проблема заключается в том, что, когда нажата кнопка запуска, кажется, что существует задержка (которая, как я предполагаю, связана с повторной инициализацией таймера при каждом вызове startTimer). Есть ли способ просто приостановить и возобновить таймер, не отменяя его и воссоздавая? или лучший/альтернативный способ сделать это?
Спасибо.
Вы не можете приостановить таймер без использования invalidate
. Что вы можете сделать, это добавить
[timer fire];
после создания таймера в startTimer
.
Немного устарел, но если кому-то все еще интересно...
не останавливать таймер, но останавливать приращение во время паузы, например
- (void)increaseTimerCount
{
if (!self.paused){
timerCount++
}
timerCountLabel.text = [NSString stringWithFormat:@"%d", timerCount];
}