Используете NSTimer для ЧЧ: ММ: СС? - PullRequest
5 голосов
/ 13 февраля 2012

Как я могу изменить этот код, чтобы он имел ЧЧ: ММ: СС (часы, минуты, секунды,

И можете ли вы сказать мне, если мне нужно добавить код в .h или .m, чтобы я знал, какой из них

на данный момент оно увеличивается как 1, 2, 3, 4 и т. Д.

Привет, ребята, просто чтобы сообщить вам, что я приманка для любителя, вы бы скопировали и прошлись, поэтому я знаю, что вы имеете в виду, спасибо

С уважением

Пол

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

1 Ответ

7 голосов
/ 13 февраля 2012

Сначала объявите переменную baseDate в вашем FirstViewController.h , например:

@interface FirstViewController : UIViewController {

    IBOutlet UILabel *time; 

    NSTimer *myticker;

    //declare baseDate
    NSDate* baseDate;
}

Затем в FirstViewController.m метод запуска добавить baseDate = [NSDate date] следующим образом:

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

После этого измените метод showActivity на следующий:

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

Также обратите внимание, чтовам придется изменить значение интервала для вашего таймера, иначе ваша метка будет обновляться только раз в секунду.

...