多的時間間隔,而無需創建多個NSTimer
的情況下,如何將一個實現NSTimer
火與序列中不同的時間間隔特定或多個方法。例如method1(0.3秒),method2(0.5),method3(0.7)等。的NSTimer在一個序列
,如果有人能請分享任何代碼示例我將不勝感激。
多的時間間隔,而無需創建多個NSTimer
的情況下,如何將一個實現NSTimer
火與序列中不同的時間間隔特定或多個方法。例如method1(0.3秒),method2(0.5),method3(0.7)等。的NSTimer在一個序列
,如果有人能請分享任何代碼示例我將不勝感激。
我不確定你的最終目標是什麼,但在閱讀完你的問題後我建議嘗試以下方法,也許這是你要找的。
你應該把這個代碼,您通常要啓動相同的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];
NSTimer
本身不提供該功能,它觸發或者以固定時間間隔一次或多次。您將需要多個定時器才能達到此效果,或完全從NSTimer
移開。
在選擇方法創建一個計時器與一個時間間隔選擇=從那裏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.3調用方法1,0.5 - 方法2,有最有可能實現這個
製作的包裝來包裝NSTimer
方法調用像這樣沒有其他辦法:
- (void) CallTimerWithTimeInterval:(float) interval andSelector:(NSString *)methodName { SEL selector = selectorFromString(methodName); [NSTimer scheduledTimerWithTimeInterval:interval target:self selector:@selector(selector) userInfo:nil repeats:YES]; }
你可以調用此方法並根據您的要求傳遞時間間隔和選擇器方法。
謝謝,我用另一種方法。順便說一句,如果我使用這種方法,我必須停止或零任何階段創建的計時器?我將如何實現這一目標? – 2012-07-18 11:01:15
要停止計時器,您需要將'repeats'參數設置爲'NO'。您可以通過向包裝函數添加另一個參數來實現此目的。 - (void)CallTimerWithTimeInterval:(float)interval和Selector:(NSString *)methodName withRepeats:(BOOL)YESorNO'。 – 2012-07-18 11:38:21
感謝您的幫助,只是好奇這種方法是否比我選擇的更好。 這種情況是我不得不多次調用這個方法可以說10次。它會創建10個預定在特定時間發射的NSTimer副本。現在,如果我希望一次性終止定時器,重複NO可能無助於它停止重新發生。 一旦計劃了10份,我將如何阻止它。製作一個NSTimer的實例變量,然後發送一個零消息? – 2012-07-18 12:58:44
謝謝,我已經使用了相同的代碼,另外我添加了如何取消排隊的請求。 – 2012-07-18 11:32:53