我一直在做一些阅读 - 我正在制作一个秒表风格的应用程序,出于habbit,我总是锁定我的屏幕。我希望我的应用程序继续倒计时。
所以似乎不活动阻止了NSTimers。我尝试添加带有值音频的UIBackgroundModes - 这似乎变成了“App播放音频或使用AirPlay传输音频/视频”但是当我锁定屏幕时计时器仍然停止。
有人可以通过这个告诉我! iOS7
答案 0 :(得分:2)
你不应该在后台运行计时器。 Apple采取措施防止它,因为它会耗尽用户的电池。
不幸的是,你真的不能像Apple那样编写秒表或计时器风格的应用程序。 Apple可以访问第三方应用程序没有的系统功能,而且他们的应用程序不必遵循相同的规则。
答案 1 :(得分:0)
你绝对可以建立一个支持锁定屏幕/背景应用程序的秒表应用程序。
诀窍是简单地记录秒表启动的日期。每次需要更新显示时(例如,在计时器回调中),您只需计算自开始日期起经过的时间。
这是一个实现此行为的简单视图控制器:
@implementation StopwatchViewController
{
NSTimer *timer;
NSDate *timerStartDate;
UILabel *timeLabel;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Create a label
timeLabel = [[UILabel alloc] initWithFrame:self.view.bounds];
timeLabel.textAlignment = NSTextAlignmentCenter;
timeLabel.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
timeLabel.font = [UIFont systemFontOfSize:24.0f];
[self.view addSubview:timeLabel];
// Start stopwatch
[self startStopwatch];
}
#pragma mark - Time Control
- (void) startStopwatch
{
// Record when the timer started
timerStartDate = [NSDate date];
// Schedule a timer to update our label
timer = [NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(timerUpdate:)
userInfo:nil
repeats:YES];
}
- (void) stopStopwatch
{
[timer invalidate];
timerStartDate = nil;
timer = nil;
}
#pragma mark - Timer Callback
- (void) timerUpdate:(id)sender
{
// Compute the time interval since timer start
NSTimeInterval runTime = [[NSDate date] timeIntervalSinceDate:timerStartDate];
timeLabel.text = [NSString stringWithFormat:@"%.1f", runTime];
}
@end
关于用户在达到特定时间时倒计时/警报,可以使用本地通知来完成。如果您从固定时间开始倒计时,那么安排本地通知将在未来发生。