2011-10-09 61 views
-1

可能重複的一個時間間隔:
Change the time interval of a Timer增加定時器

所以我有一個計時器:

timer=[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(createNewImage) userInfo:nil repeats:YES]; 

而且我想計時器減少每十秒鐘,那scheduledTimerWithTimeInterval在10秒後變爲1.5,然後在10秒後變成1.0 ...是否有可能做到是,如果可能的話,我該怎麼做?

回答

0

您不必使用多個定時器,您只需添加一個變量以用於該時間間隔,然後創建一個使定時器失效,更改該變量並再次啓動定時器的方法。例如,你可以創建一個啓動計時器的方法。

int iTimerInterval = 2; 

-(void) mTimerStart { 
    timer = [NSTimer scheduledTimerWithTimeInterval:iTimerInterval target:self selector:@selector(createNewImage) userInfo:nil repeats:YES]; 
} 

-(void) mTimerStop { 
    [timer invalidate]; 

    iTimerInterval = iTimerInterval + 5; 

    [self mTimerStart]; 
} 

這將減少計時器的時間間隔,保持計時器會簡單的方法,但我個人更喜歡使用下面的一個,因爲它可以確保計時器只跑了一次,這樣它會不會重複實例,迫使您的應用程序變得非常糟糕,同時也讓您的工作更輕鬆。

int iTimerInterval = 2; 
int iTimerIncrementAmount = 5; 
int iTimerCount; 
int iTimerChange = 10; //Variable to change the timer after the amount of time 
bool bTimerRunning = FALSE; 

-(void) mTimerToggle:(BOOL)bTimerShouldRun { 
    if (bTimerShouldRun == TRUE) { 
     if (bTimerRunning == FALSE) { 
      timer = [NSTimer scheduledTimerWithTimeInterval:iTimerInterval target:self selector:@selector(mCreateNewImage) userInfo:nil repeats:YES]; 
      bTimerRunning = TRUE; 
     } 
    } else if (bTimerShouldRun == FALSE) { 
     if (bTimerRunning == TRUE) { 
      [timer invalidate]; 
      bTimerRunning = FALSE; 
     } 
    } 
} 

-(void) mCreateNewImage { 
    //Your Code Goes Here 

    if (iTimerCount % iTimerChange == 0) { //10 Second Increments 
     iTimerInterval = iTimerInterval + iTimerIncrementAmount; //Increments by Variable's amount 

     [self mTimerToggle:FALSE]; //Stops Timer 
     [self mTimerToggle:TRUE]; //Starts Timer 
    } 

    iTimerCount ++; 
} 

-(void) mYourMethodThatStartsTimer { 
    [self mTimerToggle:TRUE]; 
} 

我沒有完成所有的編碼,但這是大部分你需要的。只要改變一些東西,你就會很開心!

2

創建定時器後,您無法修改定時器。要更改定時器時間間隔,請使舊定時器無效並使用新時間間隔創建一個新定時器。

0

您將需要一組或一系列定時器,每個定時器對應不同的時間間隔。如果要按時間順序切換到下一個時間間隔,請停止/取消一個定時器並啓動下一個定時器。