Как вложить 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 к таймерам и не будут задерживаться никаким кодом блокировки, который вы могли бы использовать в любом из ваших методов.

Другие вопросы по тегам