所以我有一个计时器:
timer=[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(createNewImage) userInfo:nil repeats:YES];
我希望计时器每十秒减少一次,scheduleTimerWithTimeInterval在10秒后变为1.5然后在10秒后变为1.0 ......是否可以这样做,如果可能,我该怎么办呢?
答案 0 :(得分:2)
创建计时器后无法修改计时器。要更改计时器间隔,请使旧计时器无效并使用新间隔创建一个新计时器。
答案 1 :(得分:0)
您将需要一组或一系列计时器,每个计时器对应一个不同的时间间隔。当您想要更改为时间顺序中的下一个时间间隔时,停止/使一个计时器无效并启动下一个计时器。
答案 2 :(得分: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];
}
我没有完成所有的编码,但这是你需要的大部分内容。只需改变一些事情,你就会好起来!