Пример основного таймера iphone
Хорошо, я искал в Интернете и даже смотрел в пару книг для ответа, потому что я не могу понять документацию Apple для NSTimer. Я пытаюсь реализовать 2 таймера на одном и том же представлении, каждый из которых имеет 3 кнопки (START - STOP - RESET).
Первый таймер отсчитывает от 2 минут и затем подает звуковой сигнал.
Второй таймер подсчитывается с 00:00 на неопределенный срок.
Я предполагаю, что весь код будет записан в методах трех разных кнопок, но я полностью потерял попытку прочитать документацию на яблоко. Любая помощь будет принята с благодарностью.
Ответы
Ответ 1
В основном то, что вы хотите, - это событие, которое срабатывает каждые 1 секунду или, возможно, с интервалом в 1/10 секунды, и вы будете обновлять свой интерфейс после того, как отметит таймер.
Следующее создаст таймер и добавит его в цикл выполнения. Сохраните таймер где-нибудь, чтобы его можно было убить, когда это необходимо.
- (NSTimer*)createTimer {
// create timer on run loop
return [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerTicked:) userInfo:nil repeats:YES];
}
Теперь напишите обработчик для отметки таймера:
- (void)timerTicked:(NSTimer*)timer {
// decrement timer 1 … this is your UI, tick down and redraw
[myStopwatch tickDown];
[myStopwatch.view setNeedsDisplay];
// increment timer 2 … bump time and redraw in UI
…
}
Если пользователь нажимает кнопку, вы можете reset подсчитывать или начинать или останавливать отметку. Чтобы закончить таймер, отправьте сообщение о недействительности:
- (void)actionStop:(id)sender {
// stop the timer
[myTimer invalidate];
}
Надеюсь, это поможет вам.
Ответ 2
Я следовал за Джонатаном, за исключением того, что вы должны использовать NSDate в качестве ссылки для обновления пользовательского интерфейса. Значение вместо обновления тика на основе NSTimer, когда запускается NSTimer, вы принимаете разницу между NSDate и вашей контрольной датой.
Причиной этого является то, что NSTimer имеет разрешение 50-100 мс, что означает, что через несколько минут ваш таймер может стать довольно неточным, если произойдет много замедления работы устройства. Использование NSDate в качестве контрольной точки гарантирует, что единственное отставание между фактическим временем и отображаемым временем заключается в вычислении этой разницы и рендеринга дисплея.