选项 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)
        }
    }
}