Создать таймер обратного отсчета с поддержкой часов, минут, секунд, доли iPhone SDK - PullRequest
0 голосов
/ 27 ноября 2011

Заинтересован в создании таймера для подсчета пользователя.

Мне было интересно, придется ли мне отслеживать все целочисленные переменные по отдельности или я мог бы использовать форматер даты.

В настоящее время я использую -scheduledTimerfoo для вызова метода -updateLabel с секундами, но через 100 секунд он выглядит немного ужасно.Я бы хотел отобразить «часы: минуты: секунды: доли секунды».

Приветствия

Сэм

1 Ответ

4 голосов
/ 27 ноября 2011

NSDateFormatter предназначен только для форматирования дат, а не интервалов времени. Лучшим способом сделать это будет запись при запуске таймера, а каждую секунду обновлять метку, указав, сколько времени прошло с момента запуска таймера.

- (void)startTimer {
    // Initialize timer, with the start date as the userInfo
    repeatTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateLabel) userInfo:[NSDate date] repeats:YES];
}

- (void)updateLabel:(NSTimer *)timer {
    // Get the start date, and the time that has passed since
    NSDate *startDate = (NSDate *)[timer userInfo];
    NSTimeInterval timePassed = [[NSDate date] timeIntervalSinceDate:startDate];

    // Convert interval in seconds to hours, minutes and seconds
    int hours = timePassed / (60 * 60);
    int minutes = ((int)timePassed % (60 * 60)) / 60;
    int seconds = (((int)timePassed % (60 * 60)) % 60);
    NSString *time = [NSString stringWithFormat:@"%i:%i:%i", hours, minutes, seconds];

    // Update the label with time string
}
...