Мое приложение работает так же, как и многие обычные банковские приложения: когда пользователь перемещает приложение в фоновый режим (например, нажав кнопку «Домой»), текущий видимый ViewController
заменяется экраном запуска.Когда приложение возвращается на передний план, оно отображает предыдущий ViewController
или какой-либо другой ViewController
(который зависит от ряда условий, таких как, например, продолжительность приложения в фоновом режиме и т. Д.), Ноони здесь не важны).
В iOS 12 и более ранних версиях я использую очень простой механизм - на applicationDidEnterBackground
я устанавливаю текущую ViewController
для локальной переменной на AppDelegate
и отображаю запускscreen.
savedViewController = window?.rootViewController
Вкл. applicationWillEnterForeground
, я проверяю, выполнены ли все необходимые условия, и устанавливаю Window
'ViewController
на сохраненный ViewController
.
window?.rootViewController = savedViewController
Это больше не работает на iOS 13. Когда приложение выходит на передний план, отображается начальная история кабанов.Установка rootViewController
для текущего Window
никак не влияет.
Я пытался решить эту проблему, включив сцены в моем приложении, но это тоже не сработало.
В SceneDelegate
я могу установить значение по умолчанию ViewController
в методе scene:willConnecTo
следующим образом:
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow(frame: windowScene.coordinateSpace.bounds)
window?.windowScene = windowScene
let launchStoryboard = UIStoryboard(name: "LaunchScreenVersion", bundle: Bundle.main)
let launchViewController = launchStoryboard.instantiateInitialViewController()
window?.rootViewController = launchViewController
window?.becomeKey()
Приведенный выше код работает, но метод вызывается только при первой загрузке сцены,Затем я попытался переместить свой код с applicationWillEnterForeground
на sceneWillEnterForeground
, но это тоже не сработало.Когда я установил Window
ViewController
в этом методе, это не имеет никакого эффекта, и изначально загружается только ViewController
.
Я также попытался переместить код в sceneDidBecomeActive
,но это имело точно такой же эффект.
Я знаю, что iOS имеет встроенное восстановление состояния, но из-за политик безопасности мы не можем использовать их в приложении, так как никакое пользовательское состояние не может быть сохранено, еслиприложение больше не работает.
Есть идеи, как мне поменять ViewController
с заставкой, когда приложение переходит в фоновый режим, и установить его обратно, когда приложение выходит на передний план?