2013-11-29 2 views
-2

Я занимаюсь чтением - я делаю приложение в стиле секундомера, и из habbit я всегда блокирую свой экран. Я хочу, чтобы приложение продолжало обратный отсчет.iOS NSTimer останавливается, когда приложение входит в неактивное

Так что кажется неактивным останавливается NSTimers. Я попытался добавить UIBackgroundModes со звуком ценности, который, кажется, превращается в «Приложение воспроизводит аудио или передает аудио/видео с помощью AirPlay», но таймер все еще останавливается, когда я блокирую свой экран.

Может кто-нибудь поговорить обо всем этом! iOS7

+0

Просьба выполнить поиск. Существует множество существующих вопросов, обсуждающих эту тему. – rmaddy

+0

См. Http://stackoverflow.com/search?q=%5Bios%5D+stopwatch+background – rmaddy

+0

Это не настоящие решения. Rmaddy. Поскольку мне нужно воспроизводить звук в определенный момент, когда мое приложение находится в фоновом режиме. Эти решения в основном связаны с расчетом разницы времени на событиях наблюдателя, что в моем случае не то, что я хочу. Я хочу, чтобы таймер продолжал обратный отсчет с 60 и выводил аудио в определенных точках в сторону 0. – RenegadeAndy

ответ

2

Вы не должны запускать таймеры в фоновом режиме. Apple предпринимает шаги, чтобы предотвратить его, поскольку он истощает аккумулятор пользователя.

К сожалению, вы действительно не можете написать приложение для секундомера или таймера, например, Apple. Apple имеет доступ к системным функциям, которых нет в сторонних приложениях, и их приложениям не нужно играть по тем же правилам.

+0

Мне просто нужно предупредить моих пользователей о входе в заблокированный режим в этом случае - жалость! Ограничительное яблоко: @ - это плохой пользовательский интерфейс для такого приложения, которое было бы очень полезно для других людей. Я полагаю, что приличная батарея - основа для защиты, которая достаточно справедлива. – RenegadeAndy

+0

@RenegadeAndy - Так это «Мой путь или шоссе»? (Посмотрите на [местные уведомления] (http://tinyurl.com/p7xrqn8).) –

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 

Что касается подсчета вниз/тревожного пользователя, когда он попадет в определенное время, это может быть сделано с использованием местных уведомлений. Если вы отсчитываете время с фиксированного времени, тогда планируйте локальное уведомление, которое произойдет в будущем.

Смежные вопросы