2010-07-24 48 views
0

我想有一個NSTimer每1秒鐘執行一次,並有另一個NSTimer在該定時器內執行,稍微小於1秒。如何在另一個嵌套NSTimer?

其實我不確定什麼是最好的方法來做到這一點,但我想每秒出現一個隨機圖像,然後在第二秒後消失。

所以我需要某種形式的失速或者可以傳遞時間然後再執行隱藏按鈕的東西。

如果我將按鈕設置爲TRUE,然後將其設置爲FALSE,則此外觀時間會很短,如何停止或進行第二次通過然後再次隱藏圖像?

在此先感謝

回答

1

您可以嘗試自己設置成顯示,並在指定的時間間隔後隱藏物體的不斷循環,直到你往復兩個反向作用的方法中斷它通過使用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]; 
} 

您可以通過在performSelector:withObject:afterDelay:呼叫周圍添加一條if語句來檢查一些結束條件來中斷循環。

+0

嗨克里斯。延遲之後還有另一種辦法嗎?而不是myObject setHidden,因爲myObject會每秒更改一次計時器。當我將myObject設置爲合適的按鈕時,按鈕在隱藏和顯示方面不能正常工作。我只想在大約1秒後執行一個聲明。 – jarryd 2010-07-24 17:45:24

+0

我不確定你的意思。是@Peter Zich的答案你在找什麼? – 2010-07-24 18:46:54

+0

不,它不是我想要做的。我基本上不想在該方法上執行任何操作1秒,然後運行我的hidden = YES代碼。 – jarryd 2010-07-24 19:59:14

1

我會推薦使用NSTimer的initWithFireDate:interval:target:selector:userInfo:repeats:。這可以讓你定時器觸發定時器(如果你設置了repeatsYES),你可以指定一個fireDate(第一次定時器被觸發)立即進行一個循環,稍後進行另一個循環。與performSelector相比,此方法的更好之處在於可以通過將invalidate發送給定時器來輕鬆終止,並且不會因任何方法中的任何阻止代碼而被延遲。

相關問題