2011-08-28 24 views
3

我正在使用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) { 
    [email protected]"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; 
} 
+0

我可以看到你的DataSingleton是怎麼樣的? :) –

回答

1

每次調用showActivity你可以得到一個新的時間戳和減去它得到及時的改變舊的時間。然後添加到elapsedTime而不是1.