如何忽略Objective-C中的NSTimer TimeInterval?

时间:2015-05-22 23:45:09

标签: objective-c nstimer

使用每1秒触发一次的NSTimer时,我有以下情况。在下面的代码中,当我单击重新启动时,我想立即进入第一个条件,但直到1秒事件之后才会发生这种情况。任何想法如何在没有一秒延迟的情况下做到这一点?

int condition =0; //can only be 0, 1, or 2

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:timeInterval target:self selector:@selector(timerEvent:) userInfo:nil repeats:YES];
[timer fire];

- (void)timerFired:(NSTimer *)timer {
    seconds++;

    if(condition ==0)
       [self drawFoo];
    if(condition ==1)
       [self drawBoo];
    if(condition == 2)
       [self drawYoo];

  if(seconds >= duration){
    condition++;
    seconds =0;
   }

}

- (IBAction)reStart:(id)sender {
    condition = 0;
  }

3 个答案:

答案 0 :(得分:3)

您需要立即启动计时器,然后重新触发它:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(timerEvent:) userInfo:nil repeats:NO];
[timer fire];

- (void)timerFired:(NSTimer *)timer {
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:timeinterval target:self selector:@selector(timerEvent:) userInfo:nil repeats:NO];
    [timer fire];
    seconds++;

/...

答案 1 :(得分:1)

如果我理解正确,你的问题似乎有两种明显的方法。第一种是通过调用分支中的相同代码直接触发read语句的分支,即

if (condition == 0)

或者,您可以将代码格式略有不同,并使用- (IBAction)reStart:(id)sender { condition = 0; [self drawFoo]; } 方法中触发的单独方法,并在timerFired方法中调用此方法。实际上,这与第一个选项相同,但它更清晰,更可重复使用。

reStart:

答案 2 :(得分:0)

尝试在viewDidLoad中调用它,因为它会在视图加载时执行您想要的操作:)