2012-02-28 3 views
0

Привет, у меня есть секундомер в моем приложении.Проблема секундомера в Xcode

У меня есть кнопка запуска, остановки и сброса с секундомером.

Остановка и сброс кнопки работают

Начало работы рода.

Когда пользователь сначала нажимает кнопку «Пуск», начинается секундомер. Если они нажмут кнопку «Стоп», затем нажмите кнопку «Пуск», она начнет секундомер снова и снова.

Что мне не хватает (код, указанный ниже)?

.h

IBOutlet UILabel *stopWatchLabel; 
    NSTimer *stopWatchTimer; // Store the timer that fires after a certain time 
    NSDate *startDate; // Stores the date of the click on the start button 
    @property (nonatomic, retain) IBOutlet UILabel *stopWatchLabel; 
    - (IBAction)onStartPressed; 
    - (IBAction)onStopPressed; 
    - (IBAction)onResetPressed; 
    - (void)updateTimer 

.m

- (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:SSS"]; 
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; 
    NSString *timeString=[dateFormatter stringFromDate:timerDate]; 
    stopWatchLabel.text = timeString; 

    } 

    - (IBAction)onStartPressed { 
    startDate = [NSDate date]; 

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

    - (IBAction)onStopPressed { 
    [stopWatchTimer invalidate]; 
    stopWatchTimer = nil; 
    [self updateTimer]; 
    } 

    - (IBAction)onResetPressed { 
    stopWatchLabel.text = @"00:00:00:000"; 
    } 

Любая помощь будет большим.

Приветствия

ответ

1

В коде выше вы сохраняете время, прошедшее во время старт-стоп действия. Для этого вам понадобится переменная NSTimeInterval totalTimeInterval на уровне класса. Первоначально или при нажатии кнопки сброса его значение будет установлено на 0. В методе updateTimer вам нужно будет заменить следующий код.

NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; 
totalTimeInterval += timeInterval; 
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:totalTimeInterval ]; 

Спасибо,

0

TimeInterval увеличится, как 1,2,3,4,5 и т.д.

totalTimeInterval = totalTimeInterval + timeInterval -> 0 = 0 + 1 

В следующий раз мы называем updateTimer функция totalTimeInterval будет 1 = 1 + 2, поэтому totalTimeInterval будет 3.

Так что если мы отобразим totalTimeInterval, секунды будут 1, 3, 6, .... и т. Д.

  1. Сначала вам нужно NSTimeInterval totalTimeInterval и NSTimeInterval TimeInterval переменного уровня класса

  2. методу updateTimer вам нужно заменить следующий код.

    timeInterval = [currentDate timeIntervalSinceDate:startDate]; 
    timeInterval += totalTimeInterval; 
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 
    
  3. , а затем onStopPressed способ и следующий код.

    totalTimeInterval = timeInterval; 
    

Спасибо.