Если я правильно понял вопрос, вы хотите изменить контроллер корневого представления, когда что-то происходит во время использования вашего приложения, так что вы можете поместить этот кусок кода в ваш AppDelegate
: это просто перехватывает текущий rootViewController
, установите новый и удаляет и удаляет старый внутри перехода
func changeRootViewController(with viewController: UIViewController) {
guard let oldViewController = self.window?.rootViewController else { return }
UIView.transition(from: oldViewController.view, to: viewController.view, duration: 0.3, options: [.transitionCrossDissolve, .allowAnimatedContent]) { _ in
self.window!.rootViewController = viewController
self.window!.makeKeyAndVisible()
oldViewController.dismiss(animated: false) {
oldViewController.view.removeFromSuperview()
}
}
}
тогда, когда вам нужно изменить rootViewController
, вы можете просто:
let appDelegate = UIApplication.shared.delegate as? AppDelegate
appDelegate?.changeRootViewController(with: MyNewViewController())