2009-06-19 24 views
1

我的界面上的一個按鈕,按住,將在我的界面的其他部分執行一系列更改。這是NSTimer的工作嗎?循環界面變化

舉例來說,一秒鐘一些文字會變成藍色,那麼UImageView會改變自己的形象兩秒鐘...等等...

這一系列的變化將不斷循環通相同的步驟只要按下按鈕。

我從來沒有使用過NSTimer,但是這是否會走?

回答

3

你不需要NSTimer,你可以簡單地使用performSelector: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]; 
} 

你能記住當前正在執行的「performSelector」選擇,只有取消的那一個,但它幾乎不值得記住它。

或者,您可以使用NSTimer和狀態機,但是對於您所描述的內容,上述內容可能更容易 - 這取決於序列的一致性以及是否更容易將序列指定爲一組步驟像上面這樣,或者一組數據(在這種情況下,使用某種狀態機器,或者使用NSTimer或者performSelector:withObject:afterDelay :)

+0

謝謝,這很有效。爲了將來的參考,我將存儲延遲時間在一個數組中,並創建瞭如下幾個對象:NSNumber * one = [NSNumber numberWithDouble:0.30]; NSNumber * two = [NSNumber numberWithDouble:0.50]; .. etc .. I必須將數組中的每個對象轉換爲NSTimerInterval的雙倍,如下所示:double dubNum = [[array objectAtIndex:0] doubleValue]; NSTimeInterval dubNumTimer = dubNum; ...然後在afterDelay後使用:dubNumTimer – cannyboy 2009-06-19 07:58:04