#ios #swift #viewcontroller #appdelegate #ipados
Вопрос:
У меня есть приложение, в котором я очищаю некоторый пользовательский интерфейс, когда приложение переходит в фоновый режим. Уведомление о переходе приложения в фоновый режим появляется, если, например, на iPad пользователь проводит пальцем вверх, чтобы вызвать переключатель задач. Однако приложение продолжает работать, пока переключатель задач открыт. Как я могу отличить это от приложения, переходящего в фоновый режим и не видимого в переключателе задач? Интересно, что если я запускаю приложение из Xcode, приложение не продолжает работу в переключателе задач. Однако, если он не подключен к Xcode, он продолжается.
В целях отладки я связал делегата приложения с контроллером главного представления, чтобы я мог отправлять сообщения для отображения, когда делегат приложения получает вызовы. Я сделал это, потому что такое поведение не происходит при подключении к Xcode, поэтому печать не будет работать. Я еще не нашел метода или уведомления, указывающего на это состояние.
Комментарии:
1. Не
SceneDelegate
запускаетсяsceneWillResignActive(_:)
ли функция при вызове переключателя задач? developer.apple.com/documentation/uikit/uiscenedelegate/…2. В приложении нет функции выбора сцены. Тем не менее, я могу наблюдать уведомления о делегировании сцен. Я опубликую свои результаты в ответе.
3. Мне нужно было различать
UIScene.didEnterBackgroundNotification
, где мне нужно все приостановить, иUIScene.willDeactivateNotification
где я могу продолжать работу приложения (например, когда оно отображается в переключателе задач).
Ответ №1:
Вот как работает приложение, отмечая конкретные вызовы функций или вызовы уведомлений.
Приложение запущено.
viewDidAppear
в ViewController называется
UIScene.didActivateNotification
уведомление получено.
applicationDidBecomeActive:
вызывается в AppDelegate.
Переключатель задач вызывается при небольшом перемещении снизу вверх, если iPad.
UIScene.willDeactivateNotification
уведомление получено.
applicationWillResignActive:
вызывается в AppDelegate.
Отпустите переключатель задач, тем самым сохраняя приложение на экране, но значки теперь отображаются над приложением внизу (прекратите панорамирование после краткого панорамирования).
UIScene.didActivateNotification
уведомление получено.
applicationDidBecomeActive:
вызывается в AppDelegate.
Переключатель задач снова — на этот раз продолжайте панорамирование, пока в переключателе задач не появится несколько приложений
UIScene.willDeactivateNotification
уведомление получено.
applicationWillResignActive:
вызывается в AppDelegate.
Откройте Safari (на этот раз мы переключаемся на другое приложение, а не возвращаемся в наше приложение
, чтобы открыть переключатель задач (на данный момент приложение больше не запущено)
UIScene.didEnterBackgroundNotification
был вызван в какой — то момент, когда приложение не было видно.
Откройте приложение
applicationDidBecomeActive:
вызывается в AppDelegate.
Комментарии:
1. Операционная система iPad, соответственно, 14.5.1. В более ранних версиях вызывались различные методы.