繁体   English   中英

如何启动和停止NSTimer?

[英]How Can I Start And Stop NSTimer?

我开发秒表应用程序。 在我的应用程序中,有两个UIButton, StartBtnStopBtn ,我也使用NSTimer

现在,我想在用户单击StartBtn时启动NSTimer ,并且在您单击StopBtn时也停止。

我知道NSTimer[MyTimerName invalidate];停止了[MyTimerName invalidate]; 方法,但我不知道如何再次启动NSTimer

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

您总是可以用火重新启动NStimer

  [timer fire];

要停止它:

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

您可以通过以下方式启动计时器

#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;
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM