view.snapshotView (afterScreenUpdates: true)
blockquote>
Хотя это не очевидно здесь, я полагаю, что исходный плакат действительно находил ответ на его вопрос путем запуска потока ( доступный здесь ) в iPhone Developer Forums (который я в конечном счете должен был найти сам, потому что информацией не поделились здесь).
В случае, если кто-то еще имеет тот же вопрос и находит страницу в будущем, вот полезный ответ, который был отправлен кем-то на форуме Apple, названном "eskimo1" (который я отредактировал немного таким образом, что легче читать, не обеспечивая контекст всем исходным потоком):
См. Прерывания работы приложений в Руководство по программированию iPhone OS , особенно applicationWillResignActive
и applicationDidBecomeActive
события. (Целое руководство, конечно, стоит прочитать.) При игнорировании событий таймер, кажется, продолжается некоторое время и затем останавливается. Звучит логичным, приложение могло легко истощить батарею, если продолжается управлять. И что точно происходит с приложением? Я предполагаю, что это просто не получает процессорного времени †“, это замораживается и только тает при возвращении машины “on. ”
Я полагаю, что Ваше приложение должно работать обычно, когда приостановлено. (думайте Радио Pandora)
Проверка, чтобы видеть, освобождается ли Ваш таймер из-за Вашего скрытого представления или некоторое другое появление события.
Мой первый совет - не отключайте таймер простоя, это просто взлом. Если вы хотите, чтобы таймер работал во время событий пользовательского интерфейса, запустите таймер в текущем цикле выполнения, используя NSCommonModes:
// create timer and add it to the current run loop using common modes
self.timer = [NSTimer timerWithTimeInterval:.1 target:self selector:@selector(handleTimer) userInfo:nil repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
Недавно я столкнулся с этой проблемой в приложении, над которым я работаю, которое использует несколько таймеров и воспроизводит некоторые звуковые подсказки, и внес два относительно простых изменения:
В AppDelegate
Я реализовал следующие методы, и простое присутствие позволяет приложению продолжать работу, когда экран заблокирован
// он получает уведомление, когда устройство заблокировано
- (void) applicationWillResignActive: (UIApplication *) приложение
{
}
// получит уведомление о том, что приложение снова станет активным
- (void) applicationWillBecomeActive: (NSNotification *) aNotification
{
}
ссылки: Ссылка на протокол UIApplicationDelegate и Ссылка на класс NSApplication в документе API (доступный через Xcode, просто найдите applicationWillBecomeActive
).
Сделал main viewcontroller
class an AVAudioPlayerDelegate
и использовал этот код из примера Apple "AddMusic", чтобы звуковые оповещения, воспроизводимые приложением, хорошо смешивались со звуком iPod и т. д.
Я просто сбросил этот код в метод, который вызывается во время viewDidLoad. Если вас это интересует, вы попадаете в категорию «кто должен прочитать этот документ» для этого: Руководство по программированию аудиосессии
// Регистрирует этот класс как делегат аудиосессии.
[[AVAudioSession sharedInstance] setDelegate: self];
// Категория AmbientSound позволяет микшировать звук приложения с Media Player
// аудио. Категория также указывает, что звук приложения должен перестать воспроизводиться
// если переключатель Ring / Siilent установлен в положение «без звука» или экран блокируется.
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryAmbient error: nil];
// Активирует аудиосеанс.
NSError * ActivationError = nil;
[[AVAudioSession sharedInstance] setActive: YES error: & activationError];
Я использовал информацию из этого сообщения для небольшого образца, который я создавал. Вот код, который я использовал при запуске воспроизведения, чтобы предотвратить остановку звука:
AudioSession.Category = AudioSessionCategory.MediaPlayback;
И когда приложение заканчивает воспроизведение, чтобы сбросить исходное значение:
AudioSession.Category = AudioSessionCategory.SoloAmbientSound;
Полный пример здесь:
http://github.com/migueldeicaza/monotouch-samples/tree/master/StreamingAudio/