0

我创建了一个倒数计时器,它工作得很好..但是当它达到零时,它会继续倒计时..所以它显示-1、-2、-3等。我该如何防止它这样做?

这是我的实现文件中的代码..

@implementation ViewController

-(IBAction)start {

    myTicker = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showActivity) userInfo:nil repeats:YES];
}

-(IBAction)stop {
    [myTicker invalidate];
}

-(IBAction)reset {
    time.text = @"0";
}

-(void)showActivity {
    int currentTime = [time.text intValue];
    int newTime = currentTime -1;
    time.text = [NSString stringWithFormat:@"%d", newTime];
}

我猜我在某处遗漏了一些代码?

4

1 回答 1

0

快速解决方法是更改​​:

int newTime = currentTime - 1;

进入:

int newTime = (currentTime > 0) ? currentTime - 1 : 0;

这将阻止倒数计时器低于零。如果这就是你所需要的,那就足够了。


当它达到零时,它不会关闭计时器或执行操作。为此,您需要在上面的该行之后添加类似以下块的内容:

if ((currentTime > 0) && (newTime ==0)) {
    // optionally turn off timer
    fireZeroEvent ();
}

并提供fireZeroEvent()功能来做你需要做的任何事情。

我说可以选择关闭计时器,因为您可能希望让它继续运行,这样您就可以通过设置来重新开始倒计时,time.text而不必重新创建计时器。

因此,fireZeroEvent()仅在从 1 到 0 的转换时调用 ,而不是每次计时器在达到零后触发时调用。

于 2012-04-05T13:13:06.017 回答