2012-02-13 12 views
5

Come posso modificare il codice in modo che abbia HH: MM: SS (ore, minuti, secondi,Utilizzo di un NSTimer per HH: MM: SS?

e si può dirmi se ho bisogno di aggiungere il codice in .h o .m così ho saputo che uno

in questo momento va in su come 1, 2, 3, 4 ecc

ragazzi

hi giusto per farvi noto io sono l'esca di un dilettante vuoi copiare e incollare in modo che io conosco quello che vuoi dire grazie

tipo Saluti

Paul

.h

@interface FirstViewController : UIViewController { 

    IBOutlet UILabel *time; 

    NSTimer *myticker; 

    //declare baseDate 
    NSDate* baseDate; 

} 

-(IBAction)stop; 
-(IBAction)reset; 

@end 

.m

#import "FirstViewController.h" 

@implementation FirstViewController 

-(IBAction)start { 
    [myticker invalidate]; 
    baseDate = [NSDate date]; 
    myticker = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showActivity) userInfo:nil repeats:YES]; 
} 

-(IBAction)stop;{ 

    [myticker invalidate]; 
    myticker = nil; 
} 
-(IBAction)reset;{ 

    time.text = @"00:00:00"; 
} 
-(void)showActivity { 
    NSTimeInterval interval = [baseDate timeIntervalSinceNow]; 
    NSUInteger seconds = ABS((int)interval); 
    NSUInteger minutes = seconds/60; 
    NSUInteger hours = minutes/60; 
    time.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes%60, seconds%60]; 
} 
+0

Se si desidera misurare il tempo, suggerisco di utilizzare la classe NSDate invece di incrementare una variabile intera arbitraria. – lawicko

+0

possibile duplicato di [NSTimer - Cronometro] (http://stackoverflow.com/questions/3180899/nstimer-stopwatch) – Caleb

+0

dove inserisco la NSdate ?? devo sostituire tutto il NSTimer? –

risposta

7

In primo luogo, dichiarare basedate variabile nel FirstViewController.h, in questo modo:

@interface FirstViewController : UIViewController { 

    IBOutlet UILabel *time; 

    NSTimer *myticker; 

    //declare baseDate 
    NSDate* baseDate; 
} 

Poi, in il FirstViewControl ler.m metodo start aggiungere baseDate = [NSDate date] come questo:

-(IBAction)start { 
    [myticker invalidate]; 
    baseDate = [NSDate date]; 
    myticker = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(showActivity) userInfo:nil repeats:YES]; 
} 

Dopo di che, cambiare il vostro showActivity metodo per assomigliare a questo:

-(void)showActivity { 
    NSTimeInterval interval = [baseDate timeIntervalSinceNow]; 
    double intpart; 
    double fractional = modf(interval, &intpart); 
    NSUInteger hundredth = ABS((int)(fractional*100)); 
    NSUInteger seconds = ABS((int)interval); 
    NSUInteger minutes = seconds/60; 
    NSUInteger hours = minutes/60; 
    time.text = [NSString stringWithFormat:@"%02d:%02d:%02d:%02d", hours, minutes%60, seconds%60, hundredth]; 
} 

Si noti inoltre, che si dovrà modificare l'intervallo valore per il tuo timer, altrimenti l'etichetta verrà aggiornata solo una volta al secondo.

+0

ciao saresti in grado di aggiungerlo nel mio codice sopra perché sto trovando questo difficile da capire ?? dichiarare la variabile basata ???? grazie –

+0

Quale passaggio trovi difficile da capire? – lawicko

+0

in cui si effettuano periodi durante il data base = [data NSDate]; nel mio codice e - (void) showActivity { Intervallo NSTimeInterval = [baseData timeIntervalSinceNow]; NSUInterger seconds = ABS ((int) interval); minuti NSUInter = secondi/60; NSUIntero ore = minuti/60; time.text = [NSString stringWithFormat: @ "% 02d:% 02d:% 02d", ore, minuti% 60, secondi% 60]; } –

Problemi correlati