Подтвердить что ты не робот

Как я могу начать и остановить NSTimer?

Я разрабатываю приложение Stop Watch. В моем приложении есть два UIButtons, StartBtn и StopBtn, а также я использую NSTimer.

Теперь я хочу запустить NSTimer, когда пользователь нажимает на StartBtn, а также останавливается, когда вы нажимаете StopBtn.

Я знаю, что NSTimer остановлен методом [MyTimerName invalidate];, но я не знаю, как запустить NSTimer снова?

4b9b3361

Ответ 1

Класс NSTimer немного неудобен для использования; вместо того, чтобы отделять создание/разрушение от начала/остановки, все это свернулось вместе. Другими словами, таймер запускается сразу после его создания и останавливается, как только он уничтожается.

Поэтому вам необходимо использовать существование объекта NSTimer в качестве флага, чтобы указать, работает ли он; что-то вроде этого:

// Private Methods
@interface MyClass ()
{
    NSTimer *_timer;
}
- (void)_timerFired:(NSTimer *)timer;
@end

@implementation MyClass

- (IBAction)startTimer:(id)sender {
    if (!_timer) {
        _timer = [NSTimer scheduledTimerWithTimeInterval:1.0f
                                                  target:self
                                                selector:@selector(_timerFired:)
                                                userInfo:nil
                                                 repeats:YES];
    }
}

- (IBAction)stopTimer:(id)sender {
    if ([_timer isValid]) {
        [_timer invalidate];
    }
    _timer = nil;
}

- (void)_timerFired:(NSTimer *)timer {
    NSLog(@"ping");
}

Ответ 2

Вы всегда можете использовать огонь, чтобы снова запустить NStimer

  [timer fire];

Чтобы остановить его:

  [timer invalidate];
  //remember to set timer to nil after calling invalidate;
  timer = nil;

Ответ 3

Вы можете запустить таймер через

#define kRefreshTimeInSeconds 1
 NSTimer *myTimerName;
 .
 .
 myTimerName = [NSTimer scheduledTimerWithTimeInterval: kRefreshTimeInSeconds 
                                   target:self 
                                   selector:@selector(handleTimer:) 
                                   userInfo:nil
                                   repeats:YES];

Затем функция делегата:

-(void)handleTimer: (id) sender 
{       
   //Update Values in Label here
}

И чтобы остановить таймер

-(void)stopTimer: (id) sender 
{       
   if(myTimerName)
   {
       [myTimerName invalidate];
        myTimerName = nil;
   }
}