Изменить вид перед применениемWillEnterForeground - PullRequest
5 голосов
/ 24 мая 2011

Я хочу заблокировать пользователей из моего приложения после периода нахождения в фоновом режиме. Я ловлю это в AppDelegate в applicationWillEnterForeground (и сравниваю со временем, хранящимся в applicationWillResignActive). Если меньше, чем период ожидания, никаких действий не происходит. Если больше времени ожидания, я звоню:

[_navigationController popToRootViewControllerAnimated:NO];

, который возвращает пользователя к корневому представлению.

Отлично работает с одним визуальным прерыванием. Предыдущее представление (то, что пользователь просматривал, когда приложение стало неактивным) появляется очень кратко, прежде чем перейти к root. При тестировании кажется, что представление появляется до вызова applicationWillEnterForeground.

Единственная мысль, которая у меня возникла, - это спрятать все перед тем, как отключиться, например скрыть вид заполненным прямоугольником. Это пахнет как грязный хак для меня, поэтому я думаю, что есть лучший способ.

Я также открыт для разных способов достижения одного и того же конечного результата. Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 июня 2014

Из документов: Стратегии обработки переходов состояний приложения

Подготовка к снимку приложения

Вскоре после возврата метода applicationDidEnterBackground делегата приложения: методСистема делает снимок окна приложения.Точно так же, когда приложение просыпается для выполнения фоновых задач, система может сделать новый снимок, чтобы отразить любые соответствующие изменения.Например, когда приложение активируется для обработки загруженных элементов, система делает новый снимок, который может отражать любые изменения, вызванные включением элементов.Система использует эти снимки в пользовательском интерфейсе многозадачности, чтобы показать состояние вашего приложения.

Если вы вносите изменения в свои представления при входе в фон, вы можете вызвать snapshotViewAfterScreenUpdates: метод вашего основного представления, чтобы заставить этиизменения должны быть предоставлены.Вызов метода setNeedsDisplay для представления неэффективен для моментальных снимков, поскольку моментальный снимок делается до следующего цикла рисования, что предотвращает отображение каких-либо изменений.Вызов snapshotViewAfterScreenUpdates: метод со значением YES вызывает немедленное обновление базовых буферов, которые использует механизм моментальных снимков.

0 голосов
/ 06 июня 2011

Я решил это, сделав видение невидимым.В applicationWillResignActive у меня есть _navigationController.view.alpha = 0; и я поместил _navigationController.view.alpha = 100;в applicationWillEnterForeground после (при необходимости) подключения к представлению входа в систему.Проще, чем выталкивать и восстанавливать представления (которые в этом случае довольно тяжелые).

@ TheBlack указывает на скрытое свойство, которое, вероятно, немного проще на устройстве.Я оставляю альфу, потому что А) это забавная отладка с 50% альфа-просмотром, и Б) Мне просто нравится альфа.Но если вы не фанат альфы, как я, то скрытый может быть немного лучше.

...