2013-08-13 12 views
5

Ho un gioco che utilizza un timer. Voglio fare in modo che l'utente possa selezionare un pulsante e mette in pausa quel timer e quando fanno nuovamente clic su quel pulsante, si spegne il timer. Ho già il codice per il timer, ho solo bisogno di aiuto con la pausa del timer e il pulsante di doppia azione.Come mettere in pausa un NSTimer?

Codice di timer:

-(void)timerDelay { 

    mainInt = 36; 

    timer = [NSTimer scheduledTimerWithTimeInterval:1.0 
             target:self 
             selector:@selector(countDownDuration) 
             userInfo:nil 
             repeats:YES]; 
} 

-(void)countDownDuration { 

    MainInt -= 1; 

    seconds.text = [NSString stringWithFormat:@"%i", MainInt]; 
    if (MainInt <= 0) { 
     [timer invalidate]; 
     [self delay]; 
    } 

} 
+0

Marcatura La risposta di TBlue come corretta era corretta se ti ha aiutato. Non è necessario modificare quel codice nella domanda o aggiungere [SOLVED] nel titolo. Consiglierei di leggere [aiuto] per saperne di più sui modi corretti di pubblicare in StackOverflow. – madth3

risposta

16

È molto semplice.

// Declare the following variables 
BOOL ispaused; 
NSTimer *timer; 
int MainInt; 

-(void)countUp { 
    if (ispaused == NO) { 
     MainInt +=1; 
     secondField.stringValue = [NSString stringWithFormat:@"%i",MainInt]; 
    } 
} 

- (IBAction)start1Clicked:(id)sender { 
    MainInt=0; 
    timer=[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(countUp) userInfo:Nil repeats:YES]; 
} 

- (IBAction)pause1Clicked:(id)sender { 
    ispaused = YES; 
} 

- (IBAction)resume1Clicked:(id)sender { 
    ispaused = NO; 
} 
5

Non c'è pausa e riprendere la funzionalità in NSTimer. Puoi impiantarlo come sotto il codice.

- (void)startTimer 
{ 
    m_pTimerObject = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(fireTimer:) userInfo:nil repeats:YES]; 
} 

- (void)fireTimer:(NSTimer *)inTimer 
{ 
    // Timer is fired. 
} 

- (void)resumeTimer 
{ 
    if(m_pTimerObject) 
    { 
     [m_pTimerObject invalidate]; 
     m_pTimerObject = nil;   
    } 
    m_pTimerObject = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(fireTimer:) userInfo:nil repeats:YES]; 
} 

- (void)pauseTimer 
{ 
    [m_pTimerObject invalidate]; 
    m_pTimerObject = nil; 
} 
+5

Questo non si ferma, si ferma e si riavvia. –

+0

@CarlVeazey Come dice la risposta, non c'è alcuna funzionalità di "pausa" in 'NSTimer', quindi qualsiasi risposta (compresa quella accettata) deve aggirare il problema. Questa risposta è migliore di quella accettata perché non mantiene un timer che non sta facendo funzionare niente di prezioso. +1 –

+0

@Nate le risposte nel duplicato sembrano aggirare questo fatto pur offrendo ancora funzionalità di pausa. Non penso sia irragionevole farlo notare. –

Problemi correlati