Разница между парами методов 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, если вы поддерживаете несколько окон / сцен, методы делегирования сцены связаны с определенной сценой.