我在视图上放置了一个UILabel和一个UISlider。我希望使用滑块设置标签的时间,滑块的范围是00:00:00到03:00:00,即3小时,滑块的间隔是0.5分钟。另外,如何显示?我希望定时器在应用程序关闭后仍然运行。
我在视图上放置了一个UILabel和一个UISlider。我希望使用滑块设置标签的时间,滑块的范围是00:00:00到03:00:00,即3小时,滑块的间隔是0.5分钟。另外,如何显示?我希望定时器在应用程序关闭后仍然运行。
首先,没有办法在您的应用关闭后保持定时器运行。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];
}
我在我的一个应用程序中做了类似的操作,但现在没有代码方便查看。
这段代码是错误的。
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];
当您的应用程序进入后台时,可以使计时器继续运行。
正如@shawn craver所说,您无法在应用程序进入后台时做到这一点,但是您可以在应用程序进入后台(“未终止”)时执行此操作,这是一个不同的事件applicationDidEnterBackground,因此您将需要使用一些多线程GCD(Grand Central Dispatch)。
请参考此链接