Цель-C: NSTimer и обратный отсчет - PullRequest
4 голосов
/ 07 октября 2011

Я знаю, что должен понимать документацию Apple для NSTimer, но я не понимаю! Я также прочитал много вопросов об этом, но не могу найти тот, который подходит моему делу. Ну вот оно:

Пользователь вводит часы и минуты через текстовые поля. Я конвертирую их в целые числа и отображаю их в "countDownLabel".

  1. Как мне сделать отсчет до нуля?
  2. Было бы неплохо показать секунды, которые пользователь не импортировал, но, думаю, это будет несложно.
  3. Как можно было остановить эту процедуру нажатием кнопки UIB?

Я знаю, что много спрашиваю ... Буду очень признателен, если кто-нибудь сможет помочь!

int intHourhs;
intHourhs=([textHours.text intValue]);
int intMinutes;
intMinutes=([textMinutes.text intValue]);
int *intSeconds;
intSeconds=0;

NSString *stringTotalTime=[[NSString alloc] initWithFormat:@"%.2i:%.2i:%.2i",intHourhs,intMinutes,intSeconds]; 
[countDownLabel setFont:[UIFont fontWithName:@"DBLCDTempBlack" size:45]];
countDownLabel.text=stringTotalTime;

Ответы [ 2 ]

17 голосов
/ 07 октября 2011

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

NSDate* startDate = [NSDate date];

Затем вы можете запустить таймер на регулярной основе (здесь 1 секунда)интервалы повторного вызова метода в вашем классе

NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(checkCountdown:) userInfo:nil repeats:YES];

И в этом методе вы сравниваете истекшее время с общим временем обратного отсчета и обновляете интерфейс

-(void) checkCountdown:(NSTimer*)_timer {

    NSTimeInterval elapsedTime = [[NSDate date] timeIntervalSinceDate:startDate];

    NSTimeInterval remainingTime = totalCountdownInterval - elapsedTime;

    if (remainingTime <= 0.0) {
        [_timer invalidate];
    }

    /* update the interface by converting remainingTime (which is in seconds)
       to seconds, minutes, hours */

}
0 голосов
/ 07 октября 2011

Это большой заказ.Но начни с детских шагов.Вам необходимо создать метод в вашем классе, который при вызове (каждые N секунд) будет обновлять метки, которые вы хотите обновить.Затем вы организуете таймер для вызова этого метода каждые N секунд.

Есть несколько вариантов таймера, которые вы могли бы использовать, но для этого случая наиболее простым является, вероятно, NSTimer scheduleTimerWithTimeInterval: target: selector:userInfo: repeat: .

Напишите ваш метод, чтобы он выглядел как - (void)timerFireMethod:(NSTimer*)theTimer, а селектор для метода таймера, приведенного выше, - @selector(timerFireMethod:).

...