2012-02-13 16 views
5

Nasıl bu kodu değiştirebilirHH: MM: SS için bir NSTimer kullanma? MM: o HH sahiptir böylece

SS (saat, dakika, saniye Ve bu yüzden bilinen .h veya .m kodunu eklemeniz gerekiyorsa söyleyebilir misin hangisi

Şu anda

o i sayesinde

ne anlama bilinen bu yüzden

hi adamlar sadece bir amatör yem kopyalayıp olur ve geçmiş olduğuma bilinen izin 4 vs, 3, 2, 1 gibi gider

tür İlgililer

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

Saati ölçmek isterseniz, bazı rasgele tamsayı değişkenlerini artırmak yerine NSDate sınıfını kullanmanızı öneririm. – lawicko

+0

[NSTimer - Kronometre] 'nin olası bir kopyası (http://stackoverflow.com/questions/3180899/nstimer-stopwatch) – Caleb

+0

NSdate'i nereye koyarım? tüm NSTimer’i değiştirir miyim? –

cevap

7

Birincisi, bu gibi, FirstViewController.h yılında baseDate değişkeni bildirin:

@interface FirstViewController : UIViewController { 

    IBOutlet UILabel *time; 

    NSTimer *myticker; 

    //declare baseDate 
    NSDate* baseDate; 
} 

Sonra içinde FirstViewControl ler.m başlangıç ​​yöntemi şöyle baseDate = [NSDate date] ekleyin:

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

Bundan sonra bu gibi görünecek şekilde showActivity yöntemini değiştirmek:

-(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]; 
} 

Ayrıca dikkat, bu aralığı değiştirmek zorunda olacağını zamanlayıcınız için değer, aksi takdirde etiketiniz sadece bir kez güncellenir.

+0

merhaba bunu anlamak için bunu bulmak zor çünkü yukarıdaki benim koduma eklemek mümkün olurdu ?? basedate değişkenini bildirme ???? Teşekkürler –

+0

Anlamakta zorlandığınız adım nedir? – lawicko

+0

bir istasyonda baseDate = [NSDate date]; kodumda ve - (void) showActivity { NSTimeInterval interval = [baseDate timeIntervalSinceNow]; NSUInteger saniye = ABS ((int) aralık); NSUInteger dakika = saniye/60; NSUInteger saat = dakika/60; time.text = [NSString stringWithFormat: @ "% 02d:% 02d:% 02d", saatler, dakikalar% 60, saniye% 60]; } –

İlgili konular