#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:
Не устанавливайте начальную дату при каждом нажатии кнопки «Пуск». Только самый первый и после любого сброса. Логическая переменная состояния может помочь отслеживать.