選項 2 模擬(更好)呈現替代流程

在最直接的實現中,Onboarding 流可以簡單地在模態上下文中呈現,因為在語義上使用者是在單個旅程中。

[Apple 人機介面指南 - 模態] [1]:

考慮建立模態上下文時,只有在獲得某人的注意力,必須完成或放棄任務以繼續使用該應用程式或儲存重要資料時,才能建立模態上下文。

以模態方式呈現允許在旅程結束時解僱的簡單選項,幾乎沒有交換控制器。

標準方式也支援自定義轉換,因為它使用 ViewController.present() API:

// MARK: - Onboarding

extension AppDelegate {

    func showOnboarding() {
        if let window = window, let onboardingViewController = UIStoryboard(name: "Onboarding", bundle: nil).instantiateInitialViewController() as? OnboardingViewController {
            onboardingViewController.delegate = self
            window.makeKeyAndVisible()
            window.rootViewController?.present(onboardingViewController, animated: false, completion: nil)
        }
    }

    func hideOnboarding() {
        if let window = UIApplication.shared.keyWindow {
            window.rootViewController?.dismiss(animated: true, completion: nil)
        }
    }
}