Как сделать постоянный (многозадачный) секундомер? - PullRequest
3 голосов
/ 29 августа 2011

Я использую NSTimer, чтобы сделать секундомер.Я бы хотел, чтобы он продолжал работать, если пользователь переключается на другое приложение, но сейчас оно работает только при запуске приложения.Я полагаю, что это, вероятно, довольно просто исправить, записав метку времени при запуске таймера, но я не совсем уверен, как согласовать это с возможностью приостановить / перезапустить таймер в середине.

Мой код:

-(IBAction)start;
{
    if(sharedInstance.timer == nil){
    sharedInstance.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self     selector:@selector(showActivity) userInfo:nil repeats:YES];
    sharedInstance.timerRunning = YES;
    }
}


-(IBAction)stop;
{
    [sharedInstance.timer invalidate];
    sharedInstance.timer = nil;
    sharedInstance.timerRunning = NO;
}


-(void)showActivity;
{
    sharedInstance.elapsedTime += 1;

    int hours = sharedInstance.elapsedTime / 3600 ;
    int minutes = sharedInstance.elapsedTime / 60 - hours * 60; 
    int seconds = sharedInstance.elapsedTime - hours * 3600 - minutes * 60;

    sharedInstance.timeString = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
    self.readout.text = sharedInstance.timeString;
}

-(void)viewDidLoad {
    sharedInstance = [DataSingleton sharedInstance];
    if (sharedInstance.timeString==nil) {
    sharedInstance.timeString=@"00:00:00";
    }
    self.readout.text = sharedInstance.timeString;
    [sharedInstance.timer invalidate];
    sharedInstance.timer = nil;
    if(sharedInstance.timerRunning) {
        [self start];
    }
    [super viewDidLoad];
}

-(void)reset {
    [self stop];
    sharedInstance.elapsedTime = 0;
    sharedInstance.timeString = @"00:00:00";
    self.readout.text = sharedInstance.timeString;
} 

1 Ответ

1 голос
/ 06 февраля 2012

Каждый раз, когда вы вызываете showActivity, вы можете получить новую метку времени и вычесть из нее старую, получив изменение во времени. Затем добавьте это в elapsedTime вместо 1.

...