如何在特定点停止NSTimer?

时间:2013-10-26 14:49:04

标签: ios objective-c nstimer

我创建了一个简单的按钮游戏,每次按下按钮都会给用户一个点。按钮每1.5秒随机出现在屏幕上。我希望游戏在30秒后或20个随机按钮弹出后结束。我一直在使用下面的代码在屏幕上随机弹出按钮:

timer = [NSTimer scheduledTimerWithTimeInterval: 1.5 target:self
         selector:@selector(moveButton:) 
         userInfo:nil 
         repeats:YES];

我在头文件中声明了计时器:

NSTimer *timer;
@property (nonatomic, retain) NSTimer *timer;

我在Using Timers上阅读了Apple文档,但未能完全理解它。我想也许我可以用:

- (void)countedTimerFireMethod:(NSTimer *)timer{
  count ++;
  if(count > 20){
     [self.timer invalidate];
     self.timer = nil;

但它无法正常工作。我究竟做错了什么?我是Objective-C的新手,所以我对事情的运作方式并不熟悉。

2 个答案:

答案 0 :(得分:3)

问题在于您的计时器方法是否正在传递moveButton方法,但在下面的方法中,您停止方法名称不同的计时器,请尝试以下方法: -

  self.timer = [NSTimer     
  scheduledTimerWithTimeInterval: 1.5 target:self
     selector:@selector(moveButton:) 
     userInfo:nil 
     repeats:YES];

//只需更改下面的方法名称

 - (void)moveButton:(NSTimer *)timer{
  count ++;
  if(count > 20){
    [self.timer invalidate];
    self.timer = nil;}

答案 1 :(得分:0)

如果您使用的是新版Xcode,则无需声明

NSTimer *timer;

并且在安排计时器时可以使用

self.timer = [NSTimer scheduledTimerWithTimeInterval: 1.5 target:self
         selector:@selector(moveButton:) 
         userInfo:nil 
         repeats:YES]

而不是

timer = [NSTimer scheduledTimerWithTimeInterval: 1.5 target:self
         selector:@selector(moveButton:) 
         userInfo:nil 
         repeats:YES]

您使用正确的方法停止计时器,即invalidate

您还可以参考link以获得更多说明。

如果您通过上述代码解决了这个问题,请告诉我。