2014-07-20 137 views
0

我知道沒有辦法使用NSTimer暫停計時器。我知道我必須存儲日期並再次調用它。我已經嘗試了所有解決方案,並且找不到任何成功工作的解決方案。所以我的問題是,有沒有人知道如何暫停和恢復?暫停和恢復時間Xcode

回答

0

這對我很好。 創建2個UIButtons( 'startButton' & 'resetButton'),一個UILabel來顯示時間( 'timeLabel'),NSTimeInterval( 'pauseTimeInterval'),的NSTimer(stopWatchTimer')和用下面的代碼:

NSDate *pauseStart, *previousFireDate, *startDate; 
NSTimeInterval pauseTimeInterval; 
NSTimer *stopWatchTimer; 


-(void)pauseTimer{ 
    pauseStart = [NSDate dateWithTimeIntervalSinceNow:0]; 
    previousFireDate = [self fireDate]; 
    [self setFireDate:[NSDate distantFuture]]; 
} 


-(void)resumeTimer{ 
    float pauseTime = -1*[pauseStart timeIntervalSinceNow]; 
    [self setFireDate:[previousFireDate initWithTimeInterval:pauseTime sinceDate:previousFireDate]]; 
} 

-(IBAction)startTime:(id)sender { 

    //start timer 
    if ([startButton.titleLabel.text isEqualToString:@"Start"] && (![self.stopWatchTimer isValid]) && ([timeLabel.text isEqualToString:@"00:00:00"])) 
{ 
     [startButton setTitle:@"Stop" forState:UIControlStateNormal]; 
     startDate = [NSDate date]; 
     startDate = [startDate dateByAddingTimeInterval:((-1)*(pauseTimeInterval))]; 
     self.stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0 
              target:self 
              selector:@selector(updateTimer) 
              userInfo:nil 
              repeats:YES]; 


     resetButton.hidden = YES; 

    } 

    //pause timer 
    else if (([self.stopWatchTimer isValid]) && ([startButton.titleLabel.text isEqualToString:@"Stop"])) 
    { 
     [startButton setTitle:@"Resume" forState:UIControlStateNormal]; 
     [self.stopWatchTimer pauseTimer]; 
     resetButton.hidden = NO; 

    } 

    //resume timer 
    else { 
     [startButton setTitle:@"Stop" forState:UIControlStateNormal]; 
     startDate = [NSDate date]; 
     startDate = [startDate dateByAddingTimeInterval:((-1)*(pauseTimeInterval))]; 
     [self.stopWatchTimer resumeTimer]; 
     resetButton.hidden = YES; 

     } 
    } 

-(IBAction)resetTime:(id)sender { 

    [self.stopWatchTimer invalidate]; 
    self.stopWatchTimer = nil; 
    self.timeLabel.text = @"00:00:00"; 
    [startButton setTitle:@"Start" forState:UIControlStateNormal]; 
    pauseTimeInterval = 0.0; 
    resetButton.hidden = YES; 
} 


-(void)updateTimer 
{ 
    NSDate *currentDate = [NSDate date]; 
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; 
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"HH:mm:ss"]; 
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; 
    NSString *timeString=[dateFormatter stringFromDate:timerDate]; 
    self.timeLabel.text = timeString; 
    pauseTimeInterval = timeInterval; 

}