2012-07-18 23 views
5

多的時間間隔,而無需創建多個NSTimer的情況下,如何將一個實現NSTimer火與序列中不同的時間間隔特定或多個方法。例如method1(0.3秒),method2(0.5),method3(0.7)等。的NSTimer在一個序列

,如果有人能請分享任何代碼示例我將不勝感激。

回答

5

我不確定你的最終目標是什麼,但在閱讀完你的問題後我建議嘗試以下方法,也許這是你要找的。

你應該把這個代碼,您通常要啓動相同的NSTimer類不同的時間間隔(什麼是不可能的,可惜)。

{ 
    // ... 
    [self performSelector:@selector(method1) withObject:nil afterDelay:0.3f]; 
    [self performSelector:@selector(method2) withObject:nil afterDelay:0.5f]; 
    [self performSelector:@selector(method3) withObject:nil afterDelay:0.7f]; 
    // ... 
} 

當需要取消排定所有排隊的選擇器時,請使用此代碼。

[NSObject cancelPreviousPerformRequestsWithTarget:self]; 
+1

謝謝,我已經使用了相同的代碼,另外我添加了如何取消排隊的請求。 – 2012-07-18 11:32:53

4

NSTimer本身不提供該功能,它觸發或者以固定時間間隔一次或多次。您將需要多個定時器才能達到此效果,或完全從NSTimer移開。

-3

在選擇方法創建一個計時器與一個時間間隔選擇=從那裏0.1 ,可以通過保持靜態浮動變量檢查並添加0.1〜它每次像:

static CGFloat counter= 0; 

counter+= 0.1; 

然後檢查計數器值並呼籲你的方法..

if(0.3 == counter) 
{ 
    [self callMethod1]; 
} 
else if(0.5 == counter) 
{ 
    [self callMethod2]; 
} 
else if(0.7 == counter) 
{ 
    [self callMethod3]; 
} 
... 
... 
.. 
.. 
+0

用==比較花車,因爲他們是十進制表示的二進制近似是自找麻煩。 – jbat100 2012-07-18 08:03:11

+0

但我們在我們的代碼中只加了0.1,並且計數器值不是基於諸如計時器之類的未定因素的計算結果。計數器值不取決於定時器的激發間隔,而取決於調用方法的次數。它就像'i + = 1;'所以不應該有任何問題。 – samfisher 2012-07-18 08:08:03

+1

最好使用一個整數,遞增1每100毫秒的整數,並使用'如果((計數器%3)== 0)'等等... – dreamlax 2012-07-18 08:08:27

0

我相信你應該通過當前時間間隔發射選擇器,並進一步處理它。如果時間間隔爲0.3調用方法1,0.5 - 方法2,有最有可能實現這個

-1

製作的包裝來包裝NSTimer方法調用像這樣沒有其他辦法:

- (void) CallTimerWithTimeInterval:(float) interval andSelector:(NSString *)methodName 
{ 
SEL selector = selectorFromString(methodName); 
    [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(selector) userInfo:nil repeats:YES]; 
} 

你可以調用此方法並根據您的要求傳遞時間間隔和選擇器方法。

+0

謝謝,我用另一種方法。順便說一句,如果我使用這種方法,我必須停止或零任何階段創建的計時器?我將如何實現這一目標? – 2012-07-18 11:01:15

+0

要停止計時器,您需要將'repeats'參數設置爲'NO'。您可以通過向包裝函數添加另一個參數來實現此目的。 - (void)CallTimerWithTimeInterval:(float)interval和Selector:(NSString *)methodName withRepeats:(BOOL)YESorNO'。 – 2012-07-18 11:38:21

+0

感謝您的幫助,只是好奇這種方法是否比我選擇的更好。 這種情況是我不得不多次調用這個方法可以說10次。它會創建10個預定在特定時間發射的NSTimer副本。現在,如果我希望一次性終止定時器,重複NO可能無助於它停止重新發生。 一旦計劃了10份,我將如何阻止它。製作一個NSTimer的實例變量,然後發送一個零消息? – 2012-07-18 12:58:44

相關問題