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

Kyl*_*law 1 objective-c ios xcode4.5

好吧我想要创建多个定时器,所有定时器都在不同的时间开始(25,50,1分钟,1分30秒...)但我不知道如何使它在达到0时停止并且当它达到零时,带上"玩家"到另一种观点.

继承人我的.h文件

@interface ViewController :UIViewController {

IBOutlet UILabel *seconds;

NSTimer *timer;

int MainInt;
}

@end
Run Code Online (Sandbox Code Playgroud)

继承人我的.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
Run Code Online (Sandbox Code Playgroud)

aba*_*ert 5

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

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

当然,您想要创建多个计时器.您可以将每个变量存储在不同的变量中,并为每个变量赋予不同的选择器.但是如果你看一下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];
}
Run Code Online (Sandbox Code Playgroud)

我已经留下了一些不成文的细节(比如MyCountdownClass-which 的定义必须包括方法initWithCountdown:reduceCountdown做正确的事情),但它们都应该非常简单.(另外,大概你想要一个不仅存储倒计时值的userInfo,例如,如果每个计时器将玩家发送到不同的视图,你也必须在那里存储视图.)

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

PPS的完整定义MyCountdownClass必须是可见的countDownDuration:(除非你有相同的选择一些其他类).您可能需要显式转换的结果userInfo,以MyCountdownClass *使事情更清晰.