NSTimer iPhone возобновить работу с текущего времени

#iphone #objective-c

#iPhone #objective-c

Вопрос:

Это мой код для приложения секундомера для iPhone, при нажатии кнопки «Пуск» он будет вести подсчет в правильном формате, и все работает нормально, так же как кнопка «Стоп» и «Сброс». Проблема в том, что каждый раз, когда я нажимаю «Стоп», а затем запускаю снова, создается новый таймер и не продолжается с предыдущего. Как я могу создать паузу и иметь возможность продолжить с текущего времени?

Спасибо

 NSDate *startDate;
NSTimer *stopWatchTimer;


-(void)showActivity {

    NSDate *currentDate = [NSDate date];
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate];
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"mm:ss.SS"];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
    NSString *timeString=[dateFormatter stringFromDate:timerDate];
    stopWatchLabel.text = timeString;
    [dateFormatter release];
}

- (IBAction)onStartPressed:(id)sender {
    startDate = [[NSDate date]retain];
    stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1/10 target:self selector:@selector(showActivity) userInfo:nil repeats:YES];
}

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

- (IBAction)reset:(id)sender; {
    stopWatchLabel.text = @"00:00.00";
}
  

Ответ №1:

Во время паузы вы, вероятно, захотите сохранить timeInterval до сих пор в iVar

Накопленный интервал времени = [currentDate timeIntervalSinceDate:StartDate];

и постоянно добавляет к интервалу времени.

Ответ №2:

Не устанавливайте начальную дату при каждом нажатии кнопки «Пуск». Только самый первый и после любого сброса. Логическая переменная состояния может помочь отслеживать.