2012-04-21 21 views
6

Estoy desarrollando una aplicación QuiZ. Necesita un temporizador de cuenta atrás, en el que quiero iniciar un temporizador a 75: 00.00 (mm: ss.SS) y disminuirlo a 00: 00.00 (mm: ss.SS) al reducir 1 milisegundo. Quiero mostrar una alerta que dice: ¡TIME UP! cuando el tiempo llegue a 00: 00.00 (mm: ss.SS).NSTimer Reducir el tiempo en segundos/milisegundos

estoy mostrando el tiempo siguiendo a continuación enlace

Stopwatch using NSTimer incorrectly includes paused time in display

Respuesta

13

Aquí hay soluciones simples para su problema.

Declaraciones

@interface ViewController : UIViewController 
{ 
    IBOutlet UILabel * result;  
    NSTimer * timer;     
    int currentTime; 
} 

- (void)populateLabelwithTime:(int)milliseconds; 
-(IBAction)start; 
-(IBAction)pause; 
@end 

Definición

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    currentTime = 270000000; // Since 75 hours = 270000000 milli seconds 


} 

-(IBAction)start{ 
    timer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES]; 

} 
-(IBAction)pause{ 
    [timer invalidate]; 

} 
- (void)updateTimer:(NSTimer *)timer { 
    currentTime -= 10 ; 
    [self populateLabelwithTime:currentTime]; 
    } 
- (void)populateLabelwithTime:(int)milliseconds { 
    int seconds = milliseconds/1000; 
    int minutes = seconds/60; 
    int hours = minutes/60; 

    seconds -= minutes * 60; 
    minutes -= hours * 60; 

    NSString * result1 = [NSString stringWithFormat:@"%@%02dh:%02dm:%02ds:%02dms", (milliseconds<[email protected]"-":@""), hours, minutes, seconds,milliseconds%1000]; 
    result.text = result1; 

} 
+1

+1 para la explicación detallada. Seguid así. –

+0

Hai funciona bien con algunos cambios ... tengo la vista de desplazamiento en la que estoy mostrando la hora ... Si arrastro la vista de desplazamiento la hora no está calculando (en el fondo también) ... lo que tengo que hacer. ..? – SriKanth

+1

Agregue este código para habilitar el temporizador durante el desplazamiento ........................................ .......................................... - (IBAction) start { timer = [NSTimer scheduledTimerWithTimeInterval: .01 target: selector automático: @selector (updateTimer :) userInfo: nil repeat: YES]; [[NSRunLoop currentRunLoop] addTimer: timer forMode: NSRunLoopCommonModes]; } –

3

Uso siguiente código para reducir temporizador.

double dblRemainingTime=60; //1 minute 

if(dblRemainingTime >0) 
{ 
    dblRemainingTime -= 1; 
    int hours,minutes, seconds; 
    hours = dblRemainingTime/3600; 
    minutes = (dblRemainingTime - (hours*3600))/60; 
    seconds = fmod(dblRemainingTime, 60); 
    [lblRemainingTime setText:[NSString stringWithFormat:@"%02d:%02d",minutes, seconds]]; 
} 
else 
     alert('Time up buddy');