Вы можете абсолютно создать приложение секундомера, которое поддерживает блокировку экрана/фонового рисунка приложения.
Хитрость заключается в том, чтобы просто записать дату начала секундомера. Каждый раз, когда вам нужно обновлять дисплей (например, при обратном вызове вашего таймера), вы просто вычисляете время, прошедшее с даты начала.
Вот простой контроллер представления, реализующий такое поведение:
@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
Что касается подсчета вниз/тревожного пользователя, когда он попадет в определенное время, это может быть сделано с использованием местных уведомлений. Если вы отсчитываете время с фиксированного времени, тогда планируйте локальное уведомление, которое произойдет в будущем.
Просьба выполнить поиск. Существует множество существующих вопросов, обсуждающих эту тему. – rmaddy
См. Http://stackoverflow.com/search?q=%5Bios%5D+stopwatch+background – rmaddy
Это не настоящие решения. Rmaddy. Поскольку мне нужно воспроизводить звук в определенный момент, когда мое приложение находится в фоновом режиме. Эти решения в основном связаны с расчетом разницы времени на событиях наблюдателя, что в моем случае не то, что я хочу. Я хочу, чтобы таймер продолжал обратный отсчет с 60 и выводил аудио в определенных точках в сторону 0. – RenegadeAndy