ios - 暂停后恢复计时器?

标签 ios objective-c nstimer

我查看了其他暂停/恢复计时器问题,但无法弄清楚如何解决我的问题。我只有一个简单的计时器标签和两个按钮,一个开始按钮和一个停止按钮。如果您需要有关我的项目的更多信息来帮助回答我的问题,请告诉我。谁能看出我哪里出错了?

- (void)updateTimer
{
    // Create date from the elapsed time
    NSDate *currentDate = [NSDate date];
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:self.startDate];
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];

    // Create a date formatter
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"HH:mm:ss"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];

    // Format the elapsed time and set it to the label
    NSString *timeString = [dateFormatter stringFromDate:timerDate];
    self.stopwatchLabel.text = timeString;
}

- (void)updateResumeTimer
{
    // Format the elapsed time and set it to the label
    NSString *timeString = [dateFormat stringFromDate:dateFor];
    self.stopwatchLabel.text = timeString;
}

- (IBAction)onStartPressed:(id)sender {

NSString *isItEqual = self.stopwatchLabel.text;

if ([isItEqual isEqualToString:@"00:00:00"]) {
    self.startDate = [NSDate date];

    // Create the stop watch timer that fires every 10 ms
    self.stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0
                                                           target:self
                                                         selector:@selector(updateTimer)
                                                         userInfo:nil
                                                          repeats:YES];
}
else {
    // Create the stop watch timer that fires every 10 ms
    self.stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0
                                                           target:self
                                                         selector:@selector(updateResumeTimer)
                                                         userInfo:nil
                                                          repeats:YES];

}
}


- (IBAction)onStopPressed:(id)sender {
resumeText = self.stopwatchLabel.text;
 NSLog(@"Timer is %@", resumeText);

dateFormat=[[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"HH:mm:ss"];
dateFor=[dateFormat dateFromString:resumeText];
[dateFormat setDateFormat:@"HH:mm:ss"];

[self.stopWatchTimer invalidate];
self.stopWatchTimer = nil;

[self updateTimer];
}

最佳答案

你需要添加一个属性

@property (assign, nonatomic) NSTimeInterval previousTimeInterval;

只需复制以下代码行即可。

- (void)updateTimer
{
    // Create date from the elapsed time
    NSDate *currentDate = [NSDate date];
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:self.startDate];
    timeInterval += self.previousTimeInterval;
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
    self.dateFor = timerDate;

    // Create a date formatter
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"HH:mm:ss"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];

    // Format the elapsed time and set it to the label
    NSString *timeString = [dateFormatter stringFromDate:timerDate];

    self.stopwatchLabel.text = timeString;
}

- (IBAction)onStartPressed:(id)sender {

    self.startDate = [NSDate date];

    // Create the stop watch timer that fires every 10 ms
    self.stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0
                                                        target:self
                                                     selector:@selector(updateTimer)
                                                     userInfo:nil
                                                repeats:YES];

   //Disable start button and enable stop
    self.startButton.enabled = NO;
    self.stopButton.enabled = YES;
}


- (IBAction)onStopPressed:(id)sender
{
    [self.stopWatchTimer invalidate];
    self.stopWatchTimer = nil;

    self.previousTimeInterval = [self.dateFor timeIntervalSince1970];
    // enable start button and disable stop button
    self.startButton.enabled = YES;
    self.stopButton.enabled = NO;
}

关于ios - 暂停后恢复计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23490126/

相关文章:

objective-c - iOS 7.1 imagePicker CameraFlashMode 不指示开/关状态

ios - 屏幕锁定时的 NSTimer

ios - 我用播放按钮启动一个 NSTimer,但想按停止按钮结束它,我该如何完成呢?

ios - 后台快速 NSTimer

objective-c - 使用 AVAssetReader 和 timeRange 实时读取样本

ios - 如何在通过身份验证后退出 Apple

ios 准备 segue 导致崩溃

objective-c - 如何收听屏幕截图

ios - UIButton 文本不会保持变化

objective-c - Obj-C文本字段,浮点值和SIGBART