選項 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)
        }
    }
}