选项 1 交换根视图控制器(好)
切换根视图控制器有好处,虽然转换选项仅限于 UIViewAnimationOptions
支持的转换选项,因此根据你希望在流之间进行转换的方式可能意味着你必须实现自定义转换 - 这可能很麻烦。
你只需设置 UIApplication.shared.keyWindow.rootViewController
即可显示 Onboarding 流程
解雇是通过利用 UIView.transition(with:)
并将过渡风格作为 UIViewAnimationOptions
来处理的,在这种情况下是 Cross Dissolve。 (也支持翻转和卷曲)。
在转换回主视图之前,你还必须设置主视图的框架,因为你是第一次实例化它。
// MARK: - Onboarding
extension AppDelegate {
func showOnboarding() {
if let window = UIApplication.shared.keyWindow, let onboardingViewController = UIStoryboard(name: "Onboarding", bundle: nil).instantiateInitialViewController() as? OnboardingViewController {
onboardingViewController.delegate = self
window.rootViewController = onboardingViewController
}
}
func hideOnboarding() {
if let window = UIApplication.shared.keyWindow, let mainViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() {
mainViewController.view.frame = window.bounds
UIView.transition(with: window, duration: 0.5, options: .transitionCrossDissolve, animations: {
window.rootViewController = mainViewController
}, completion: nil)
}
}
}