Разница между парами методов didBecomeActive и willResignActive для UISceneDelegate и UIApplicationDelegate?

Моя основная задача - перекрыть экран непрозрачным видом, чтобы скрыть информацию, когда приложение переходит в фоновый режим. Официальное решение описано здесь.

Проблема в том, что иногда это не работает на iOS 13.

Я нашел эту статью:

Это объясняет, как sceneDidBecomeActive(_:) а также sceneWillResignActive(_:)Работа. Но в новых проектах естьAppDelegate+SceneDelegateу старых есть AppDelegateтолько. Могу я просто использоватьapplicationDidBecomeActive(_:) а также applicationWillResignActive(_:)? Или мне как-то перенести проект на использованиеUISceneDelegate (что не поддерживается в iOS 12 и более ранних версиях)?

1 ответ

Решение

Если у вас есть приложение, созданное до Xcode 11, оно не поддерживает сцены. Пока вы не добавляете ничего, связанного со сценами (что Apple может запретить в будущем), жизненный цикл вашего приложения будет продолжать работать под iOS 13 так же, как он всегда работал под iOS 12 и ранее. Просто продолжайте использовать методы UIApplicationDelegate.


Если у вас есть приложение, поддерживающее iOS 12 и iOS 13, и вы используете сцены в iOS 13, вы должны реализовать оба applicationWillResignActive (с поддержкой iOS 12 и ранее) и sceneWillResignActive (при поддержке iOS 13 и новее).

Фактически, в приложении, поддерживающем iOS 12 и 13, вам в основном необходимо реализовать оба набора UIApplicationDelegate а также UISceneDelegate/UIWindowSceneDelegateметоды. МетодыUIApplicationDelegate будет вызываться, когда ваше приложение запускается на устройстве с iOS 12 или более ранней версии, а UISceneDelegate/UIWindowSceneDelegate методы будут вызываться, когда ваше приложение запускается на устройстве с iOS 13 или новее.

Просто помните, что в iOS 13, если вы поддерживаете несколько окон / сцен, методы делегирования сцены связаны с определенной сценой.

Другие вопросы по тегам