如何在iPhone上的UILabel上显示倒计时?

10

我在视图上放置了一个UILabel和一个UISlider。我希望使用滑块设置标签的时间,滑块的范围是00:00:00到03:00:00,即3小时,滑块的间隔是0.5分钟。另外,如何显示?我希望定时器在应用程序关闭后仍然运行。

3个回答

41

首先,没有办法在您的应用关闭后保持定时器运行。iPhone 上不允许后台应用程序。可以使用计时器来模拟(在应用程序退出时保存时间戳,并在重新启动时将其与开始时间进行比较),但它无法处理定时器在应用程序重新启动之前就结束的情况。

至于更新倒计时的 UILabel,可能可以使用 NSTimer。假设您的类中有 NSTimer timer、int secondsLeft 和一个 UILabel countdownLabel:

创建计时器:

timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats: YES];

updateCountdown方法:

-(void) updateCountdown {
    int hours, minutes, seconds;

    secondsLeft--;
    hours = secondsLeft / 3600;
    minutes = (secondsLeft % 3600) / 60;
    seconds = (secondsLeft %3600) % 60;
    countDownlabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
}

我在我的一个应用程序中做了类似的操作,但现在没有代码方便查看。


secondsLeft 的值是多少? - Rahul Vyas
这将是您希望计时器运行的秒数,很可能在其他地方根据UISlider的值进行设置。 - Shawn Craver
正如Shawn所说,应用程序关闭后无法保持计时器运行,因此请确保在您的应用程序发送UIApplicationWillTerminateNotification(我认为是这样,我有点生疏)时跟踪开始时间。当应用程序未运行时计时器运行的唯一解决方法是使用推送通知。但那可能会很昂贵。 - pxl
谢谢Shawn!我有一个问题,如何停止计时器?再次感谢。 - drexsien
1
如果你使计时器失效,它将停止计时。 - Shawn Craver
有人知道如何将这个应用到天数上吗? - Charlton Provatas

2

这段代码是错误的。

timer = [NSTimer scheduledTimerWithInterval: 1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats: YES];

应该是这样的。
timer = [NSTimer scheduledTimerWithTimeInterval: 1.0 target:self selector:@selector(updateCountdown) userInfo:nil repeats: YES];

0

当您的应用程序进入后台时,可以使计时器继续运行。

正如@shawn craver所说,您无法在应用程序进入后台时做到这一点,但是您可以在应用程序进入后台(“未终止”)时执行此操作,这是一个不同的事件applicationDidEnterBackground,因此您将需要使用一些多线程GCD(Grand Central Dispatch)。

请参考此链接

set a timer in ios


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接