2009-10-06 8 views
10

tengo uilabel y un usuario en una vista. Quiero establecer el tiempo de la etiqueta usando slider.range of slider es 00:00:00 a 03:00:00. significa 3 horas. y el deslizador de interbloqueo es de 0.5 minutos. También cómo mostrarlo. Deseo que el temporizador se ejecute incluso si la aplicación está cerrada.cómo mostrar la cuenta atrás en uilabel en iphone?

Respuesta

40

En primer lugar, no hay forma de mantener el temporizador encendido después de cerrar la aplicación. Las aplicaciones en segundo plano simplemente no están permitidas en el iPhone. Hay formas de simularlo con un temporizador (guarde una marca de tiempo cuando la aplicación se cierra y compruébela con el momento en que se inicia la copia de seguridad), pero no manejará el caso en que se agote el tiempo antes de que la aplicación se inicie de nuevo arriba.

En cuanto a la actualización de UILabel con la cuenta atrás, un NSTimer probablemente funcionaría. Algo como esto, suponiendo que tiene un temporizador NSTimer, un int secondsLeft, y una countdownLabel UILabel en su clase:

Crear el temporizador:

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

El método 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 hacer algo similar en una de mis aplicaciones, pero no tengo el código a la mano en este momento.

+0

¿cuál es el valor de secondsLeft. –

+0

Esa sería la cantidad de segundos que desea que corra el temporizador, lo más probable es que la configuración esté basada en el valor del UISlider. –

+0

como dijo shawn, no puedes mantener el temporizador encendido después de que se cierre la aplicación, así que asegúrate de mantener un registro de la hora de inicio cuando tu aplicación envíe UIApplicationWillTerminateNotification (creo que es eso, estoy oxidado). La única solución para un temporizador que se agota cuando la aplicación no se está ejecutando es usar notificación de inserción. pero eso puede ser caro. – pxl

2

Este código es incorrecto.

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

Debe ser.

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

puede mantener su temporizador en funcionamiento cuando hizo su solicitud entra en el fondo,

como craver @shawn u dijo que no puede hacer esto, pero usted puede hacer esto cuando la aplicación entra en el fondo ("no termina") que es un evento diferente applicationDidEnterBackground y con eso necesitarás algunos GCD de subprocesamiento múltiple (despacho de gran centralización).

plase consulte este enlace

set a timer in ios

Cuestiones relacionadas