Подтвердить что ты не робот

Пример основного таймера iphone

Хорошо, я искал в Интернете и даже смотрел в пару книг для ответа, потому что я не могу понять документацию Apple для NSTimer. Я пытаюсь реализовать 2 таймера на одном и том же представлении, каждый из которых имеет 3 кнопки (START - STOP - RESET).

Первый таймер отсчитывает от 2 минут и затем подает звуковой сигнал.

Второй таймер подсчитывается с 00:00 на неопределенный срок.

Я предполагаю, что весь код будет записан в методах трех разных кнопок, но я полностью потерял попытку прочитать документацию на яблоко. Любая помощь будет принята с благодарностью.

4b9b3361

Ответ 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 в качестве контрольной точки гарантирует, что единственное отставание между фактическим временем и отображаемым временем заключается в вычислении этой разницы и рендеринга дисплея.