Проблема с секундомером в Xcode - PullRequest
0 голосов
/ 28 февраля 2012

Здравствуйте, в моем приложении есть секундомер.

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

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

начало работы вроде.

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

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

.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";
    }

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

Приветствия

Ответы [ 2 ]

1 голос
/ 01 марта 2012

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

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

Спасибо,

0 голосов
/ 19 июля 2012

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;
    

Спасибо.

...