Это работа для NSTimer? Циклические изменения интерфейса - PullRequest
1 голос
/ 19 июня 2009

Кнопка на моем внутреннем интерфейсе, , если удерживать нажатой , выполнит серию изменений в других частях моего интерфейса.

Например, на одну секунду какой-то текст станет синим, затем UImageView изменит свое изображение на две секунды ... и т. Д. И т. Д.

Эта серия изменений будет повторяться в течение тех же шагов, пока нажата кнопка.

Я никогда раньше не использовал NSTimer, но так ли это?

1 Ответ

3 голосов
/ 19 июня 2009

Для этого вам не нужен NSTimer, вы можете просто использовать executeSelector: withObject: afterDelay: последовательность от одного метода к другому, пока вы не начнете снова. Запустите процесс, когда кнопка удерживается, и вызовите cancelPreviousPerformRequestsWithTarget: selector: object: когда кнопка будет отпущена. Что-то вроде:

- (void) step1
{
    // turn blue
    [self performSelector:@selector(step2) withObject:nil afterDelay:1.0];
}

- (void) step2
{
    // change image
    [self performSelector:@selector(step3) withObject:nil afterDelay:2.0];
}

- (void) step3
{
    // turn red
    [self performSelector:@selector(step1) withObject:nil afterDelay:3.0];
}

- (void) stopSteps
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(step1) object:nil];
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(step2) object:nil];
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(step3) object:nil];
}

Вы можете вспомнить выполняемый в данный момент селектор executeSelector и отменить только его, но вряд ли стоит его помнить.

В качестве альтернативы, вы могли бы использовать NSTimer и конечный автомат, но для того, что вы описываете, вышеупомянутое, вероятно, проще - это зависит от того, насколько последовательна ваша последовательность и легче ли определить вашу последовательность как набор шагов, таких как выше, или набор данных (в этом случае используйте какой-либо конечный автомат, либо с NSTimer, либо executeSelector: withObject: afterDelay:)

...