Как вложить NSTimer в другой?
Я хотел бы иметь NSTimer, который выполняется каждую 1 секунду, и иметь другой NSTimer, который выполняется в течение этого таймера чуть менее 1 секунды.
На самом деле я не уверен, что это лучший способ сделать это, но я хотел бы, чтобы случайное изображение появлялось каждую секунду, а затем исчезало после этой секунды.
Поэтому мне нужен какой-то ларек или что-то, что может скоротать время и затем снова выполнить кнопку скрытия.
Если я установлю скрытые кнопки на TRUE, а затем на FALSE, время появления будет таким коротким, как я могу остановить или сделать второй проход, а затем снова скрыть изображение?
заранее спасибо
2 ответа
Вы можете попытаться настроить себя на постоянный цикл показа и сокрытия объекта после определенного интервала, пока вы не прервете его, используя 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:
вызов.
Я бы порекомендовал использовать NSTimer initWithFireDate:interval:target:selector:userInfo:repeats:
, Это позволит вам запускать таймер через равные промежутки времени (если вы установили repeats
в YES
) и вы можете указать fireDate
(первый раз срабатывает таймер) сразу для одного цикла и чуть позже для другого. Что лучше в этом методе по сравнению с performSelector
является то, что это может быть легко прекращено путем отправки invalidate
к таймерам и не будут задерживаться никаким кодом блокировки, который вы могли бы использовать в любом из ваших методов.