使用每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;
}
答案 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中调用它,因为它会在视图加载时执行您想要的操作:)