Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reset an NSTimer's firing time to be from now instead of the last fire

I have a NSTimer that fires with an interval of 3 seconds to decrease a value. When I do an action that increases that value, I want to restart the timer to count 3 seconds from that point.

For example, if I increase the value and timer will fires in 1 second, I want to change that and make the timer fire in 3 seconds instead. Can I invalidate the timer and create it again? Or can I do it with setFireDate:, using the current date and adding an interval of 3 seconds?

like image 801
emenegro Avatar asked Oct 17 '09 17:10

emenegro


1 Answers

Yes, you can invalidate it. And create it again.

You can also use:

- (void) myTimedTask {
    // other stuff this task needs to do

    // change the variable varyingDelay to be 1s or 3s or...  This can be an instance variable or global that is changed by other parts of your app
    // weStillWantTimer is also a similar variable that your app uses to stop this recurring task

if (weStillWantTimer)
       [self performSelector:@selector(myTimedTask:) withObject:gameColor afterDelay:varyingDelay];

 }

You call myTimedTask to start the recurring task. Once it is started, you can change the delay with varyingDelay or stop it with weStillWantTimer.

like image 199
mahboudz Avatar answered Sep 20 '22 04:09

mahboudz