2009-10-06 19 views
10

Ho un uilabel e un uislider su una vista. Voglio impostare l'ora dell'etichetta usando slider.range del cursore è 00:00:00 alle 03:00:00. significa 3 ore. Interag on the slider è 0.5 minuti. Anche come mostrare. Voglio che il timer funzioni anche se l'applicazione è chiusa.come mostrare il conto alla rovescia su uilabel in iphone?

risposta

40

Prima di tutto, non c'è modo di mantenere il timer in esecuzione dopo aver chiuso l'app. Le app di sfondo semplicemente non sono consentite su iPhone. Ci sono modi per fingere con un timer (salvare un timestamp quando l'app si chiude e controllarlo contro il momento in cui si avvia il backup), ma non gestirà il caso in cui il timer si esaurisce prima che l'app venga riavviata su.

Per quanto riguarda l'aggiornamento dell'UILabel con il conto alla rovescia, un NSTimer probabilmente funzionerebbe. Qualcosa del genere, a patto di avere un timer NSTimer, un int secondsLeft, e un UILabel countdownLabel nella classe:

Creare il timer:

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

Il metodo updateCountdown:

-(void) updateCountdown { 
    int hours, minutes, seconds; 

    secondsLeft--; 
    hours = secondsLeft/3600; 
    minutes = (secondsLeft % 3600)/60; 
    seconds = (secondsLeft %3600) % 60; 
    countDownlabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds]; 
} 

I fare qualcosa di simile in una delle mie app, ma non avere il codice a portata di mano in questo momento.

+0

qual è il valore di secondsLeft. –

+0

Questo è il numero di secondi per cui si desidera eseguire il timer, molto probabilmente il setup in base al valore di UISlider. –

+0

, come ha detto Shawn, non è possibile mantenere il timer in esecuzione dopo che l'app è stata chiusa, quindi assicurati di tenere traccia dell'ora di inizio quando l'app invia UIApplicationWillTerminateNotification (penso che sia, sono arrugginito). L'unica soluzione alternativa a un timer che si verifica quando l'app non è in esecuzione consiste nell'utilizzare la notifica push. ma quello può diventare costoso. – pxl

2

Questo codice è errato.

timer = [NSTimer scheduledTimerWithInterval: 1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats: YES]; 

Deve essere.

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

è possibile mantenere il timer in funzione quando l'applicazione ha fatto entra sfondo,

come @shawn craver u ha detto non potete fare questo, ma si può fare questo quando l'applicazione entrerà in background ("non termina") che è un diverso evento applicationDidEnterBackground e con questo avrete bisogno di alcuni GCD multithreading (grand central dispatch).

prego di fare riferimento questo link

set a timer in ios

Problemi correlati