防止倒计时进入负面

时间:2012-04-05 13:06:57

标签: objective-c ios cocoa nstimer foundation

我已经创建了一个倒数计时器并且效果很好..但是当它达到零时它继续倒计时..所以它显示-1,-2,-3等。我该如何阻止它这样做? / p>

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

@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];
}

我猜我在某个地方遗漏了一些代码?

1 个答案:

答案 0 :(得分: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的转换时调用,而不是每次定时器在达到零后触发。