如何在xcode 4.5中创建倒数计时器

时间:2012-09-19 23:39:41

标签: objective-c ios xcode4.5

好的我想要创建MULTIPLE定时器,所有定时器都在不同的时间开始(25,50,1分钟,1分30秒......)但我不知道如何使它在达到0时停止并且当它达到零时停止,将“玩家”带到另一个视角。

继承我的.h文件

@interface ViewController :UIViewController {

IBOutlet UILabel *seconds;

NSTimer *timer;

int MainInt;
}

@end

继承人我的.m文件

@implementation ViewController

-(void)countDownDuration {

MainInt -= 1;

seconds.text = [NSString stringWithFormat:@"%i", MainInt];

}

-(IBAction)start:(id)sender {

MainInt = 25;

timer = [NSTimer scheduledTimerWithTimeInterval:1.0

                                         target:self
                                       selector:@selector(countDownDuration)
                                       userInfo:nil
                                        repeats:YES];
}

@end

1 个答案:

答案 0 :(得分:5)

NSTimer不会自动执行此操作,但将它添加到countDownDuration方法是微不足道的。例如:

-(void)countDownDuration {
  MainInt -= 1;
  seconds.text = [NSString stringWithFormat:@"%i", MainInt];
  if (MainInt <= 0) {
    [timer invalidate];
    [self bringThePlayerToAnotherView];
  }
}

当然你想要创建多个计时器。您可以将每个变量存储在不同的变量中,并为每个变量赋予不同的选择器。但是如果你看一下NSTimer的文档,回调方法实际上将timer对象作为选择器;你忽略了它,但你不应该这样做。

同时,您可以将任何类型的对象存储为计时器的userInfo,这样就可以为每个计时器存储一个单独的当前倒计时值。

所以,你可以这样做:

-(void)countDownDuration:(NSTimer *)timer {
  int countdown = [[timer userInfo] reduceCountdown];
  seconds.text = [NSString stringWithFormat:@"%i", countdown];
  if (countdown <= 0) {
    [timer invalidate];
    [self bringThePlayerToAnotherView];
  }
}

-(IBAction)start:(id)sender {
  id userInfo = [[MyCountdownClass alloc] initWithCountdown:25];
  timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                           target:self
                                         selector:@selector(countDownDuration:)
                                         userInfo:userInfo
                                          repeats:YES];
}

我留下了一些未写入的详细信息(例如MyCountdownClass的定义 - 必须包含做正确事情的方法initWithCountdown:reduceCountdown),但它们都应该是很简单。 (另外,大概你想要一个不仅存储倒计时值的userInfo,例如,如果每个计时器将玩家发送到不同的视图,你也必须在那里存储视图。)

PS,请注意您现在需要@selector(countDownDuration:)。 ObjC的新人一直在搞这个问题。 countDownDuration:countDownDuration是完全不相关的选择器。

PPS,MyCountdownClass的完整定义必须在countDownDuration:中可见(除非您有其他类具有相同的选择器)。您可能希望将userInfo的结果明确地转换为MyCountdownClass *以使事情更加清晰。