수색…


소개

새로운 앱 사용자에게 처음 경험을 선사하는 것이 종종 유용합니다. 로그인을 요구하거나 (상황에 따라 필요한 경우), 앱을 사용하는 방법을 설명하거나, 업데이트의 새로운 기능을 알려주는 등 여러 가지 이유가있을 수 있습니다 (Notes, 사진 및 음악 기능 등). iOS11).

비고

첫째, 다중 플로우를 다루면서 Storyboard를 효과적으로 사용할 수 있습니다. 기본적으로 응용 프로그램은 기본 흐름에 Main.storyboard 를 사용합니다. 온 보딩 / 대체 흐름은 보조 스토리 보드에 포함될 수 있습니다 (예 : Onboarding.storyboard

여기에는 여러 가지 장점이 있습니다.

  • 개발자 팀에서 각 사용자 흐름에 대한 작업을 분리 할 수 ​​있습니다.
  • 명확한 소스 제어 (자식)
  • 관심사의 분리

앱이 시작되면 어떤 흐름을 제시해야하는지 결정할 수 있습니다. 이 논리는 AppDelegate에 포함될 수 있습니다.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let isFirstRun = true // logic to determine goes here
    if isFirstRun {
        showOnboarding()
    }
    return true
}

온 보딩 플로우를 표시하려면 사용하는 사람이 여행을 완료하고 기획하려는 것을 의미 론적으로 정확하면 해지 경험을 어떻게 처리할지 고려해 볼 가치가 있습니다.

구혼:

두 가지 주요 접근법은 다음과 같습니다.

  1. 응용 프로그램의 기본 창의 루트보기 컨트롤러 교체
  2. 기본 흐름과 겹치는 모달 여정으로 온 보딩 흐름을 제시하십시오.

이 구현은 AppDelegate 확장에 포함되어야합니다.

옵션 1 : 루트보기 컨트롤러 스왑 (양호)

전환 옵션은 UIViewAnimationOptions 에서 지원하는 것으로 제한되어 있지만 루트보기 컨트롤러를 전환하면 이점이 있습니다. 따라서 흐름 간 전환 방법에 따라 사용자 정의 전환을 구현해야하므로 번거로울 수 있습니다.

UIApplication.shared.keyWindow.rootViewController 를 설정하여 온 보딩 플로우를 표시 할 수 있습니다.

해고를 이용하여 처리 UIView.transition(with:) 과로 전환 스타일을 통과 UIViewAnimationOptions 크로스 디졸브이 경우,. (뒤집기 및 뒤틀림도 지원됩니다).

처음으로 인스턴스화 할 때 메인 뷰의 프레임을 다시 설정하기 전에 프레임을 설정해야합니다.

// 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)
        }
    }
}

옵션 2 : 대안 적 흐름을 모달 표현 (더 나은)

가장 간단한 구현에서 Onboarding 흐름은 의미 론적으로 사용자가 단일 여행을하고 있기 때문에 모달 컨텍스트에서 간단히 나타낼 수 있습니다.

[Apple Human Interface Guidelines - Modality] [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)
        }
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow