Как вложить NSTimer в другой? - PullRequest
0 голосов
/ 24 июля 2010

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

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

Так что мне нужен какой-то срыв или что-то такое, что может скоротать время и затем снова выполнить кнопку скрытия.

Если я установлю скрытые кнопки на TRUE, а затем на FALSE, это время появления будет таким коротким, как я могу остановить или сделать второй проход, а затем снова скрыть изображение?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 24 июля 2010

Я бы порекомендовал использовать NSTimer initWithFireDate:interval:target:selector:userInfo:repeats:. Это позволит вам запускать таймер через регулярные промежутки времени (если вы установили repeats на YES), и вы можете указать fireDate (при первом срабатывании таймера) немедленно для одного цикла и немного позже для другой. Что лучше в этом методе по сравнению с performSelector, так это то, что его можно легко прекратить, отправив invalidate таймерам, и он не будет задержан никаким кодом блокировки, который может быть в любом из ваших методов.

1 голос
/ 24 июля 2010

Вы можете попытаться установить постоянный цикл показа и сокрытия объекта после указанного интервала, пока не прервете его, используя метод performSelector:withObject:afterDelay: взаимно двумя противоположными способами:

//On initialization, make a first call to the hide method
//to be executed after a delay
-(void) viewDidload {
    [myObject setHidden:NO];
    [self performSelector:@selector(hideObject) withObject:nil afterDelay:1.0];
}

//Whenever the hide gets called, hide, then make a call to the show method
//to be executed after a delay
-(void) hideObject {
    [myObject setHidden:YES];
    [self performSelector:@selector(showObject) withObject:nil afterDelay:1.0];
}

//Whenever the show gets called, show, then make a call to the hide method
//to be executed after a delay
-(void) showObject {
    [myObject setHidden:NO];
    [self performSelector:@selector(showObject) withObject:nil afterDelay:1.0];
}

Вы можете прервать цикл, поместив оператор if, который проверяет некоторые конечные условия для вызова performSelector:withObject:afterDelay:.

...