Изменение текста uilabel через разные промежутки времени - PullRequest
0 голосов
/ 23 марта 2012

Я создаю простое приложение для фитнеса и тренировок для iPhone. Пользователь может выбрать тип тренировки из таблицы, которая переносит их в контроллер представления, который содержит секундомер. В этом представлении есть метки, заполненные изменяемым массивом.

Я могу заставить работать секундомер и заполнить начальные метки из массива, но не могу понять, как заставить метки меняться через заданные интервалы времени. Эти интервалы не будут регулярными, поэтому могут составлять 10 минут, затем 25, затем 45 и т. Д. Я пытался сделать это с помощью операторов If, где таймер == 25, например. Я уверен, что это базовое решение, но я новичок в программировании и не могу его решить.

Код таймера следующим образом:

    - (void)updateTimer
{
    NSDate *currentDate = [NSDate date];
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"HH:mm:ss.S"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
    NSString *timeString=[dateFormatter stringFromDate:timerDate];
    timerLabel.text = timeString;
}

Таймер запуска:

- (IBAction)startTimerButton:(id)sender {

    if (timer == nil) {
        startDate = [NSDate date];  

        // Create the stop watch timer that fires every 0.1s

        timer = [NSTimer scheduledTimerWithTimeInterval:1.0/10
                                                 target:self
                                               selector:@selector(updateTimer)
                                               userInfo:nil
                                                repeats:YES];

    } 

    else {
        return;
    }
}

1 Ответ

0 голосов
/ 23 марта 2012

Я не совсем уверен, что вы после. Если вы установите временной интервал в 10 минут / 25 минут и т. Д. Вместо 1,0 / 10, то в коде, сработавшем по времени, вы узнаете, какой временной интервал для таймера.

Вы всегда можете запросить временной интервал, используя метод экземпляра timeInterval. Возможно, следующим образом.

- (void)updateTimer:(NSTimer*)timer
{
    if ([timer timeInterval] == 10 * 60) // 10 minutes have elapsed
    {
        // Do something for this timer.
    }
    else if ([timer timeInterval] == 20 * 60) // 20 minutes have elapsed
    {
    }
}

Обратите внимание, что я добавил таймер в качестве аргумента для вашей updateTimer функции. Затем вам нужно будет использовать селектор @selector(update:) (с двоеточием в конце!) В вашем методе scheduledTimerWithTimeInterval. Когда вызывается ваш селектор обратного вызова, он передает ему таймер.

Или, если у вас есть указатель на таймер, созданный вами в startTimerButton, вы можете использовать его следующим образом:

- (void)updateTimer:(NSTimer*)timer
{
    if (timer == myTenMinuteTimer) // 10 minutes have elapsed
    {
        // Do something for this timer.
    }
    else if (timer == myTwentyMinuteTimer) // 20 minutes have elapsed
    {
    }
}

Обратите внимание, что во второй причине вы сравниваете указатель на два объекта и используете его, где, как и в первом, вы сравниваете значение метода для двух объектов, поэтому объекты не обязательно должны быть указателем к тому же объекту, чтобы быть оцененным, чтобы быть истинным.

Надеюсь, это поможет!

...