iOS
Swift : AppDelegate의 rootViewController를 메인 또는 로그인 / 온 보딩 플로우로 변경
수색…
소개
새로운 앱 사용자에게 처음 경험을 선사하는 것이 종종 유용합니다. 로그인을 요구하거나 (상황에 따라 필요한 경우), 앱을 사용하는 방법을 설명하거나, 업데이트의 새로운 기능을 알려주는 등 여러 가지 이유가있을 수 있습니다 (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
}
온 보딩 플로우를 표시하려면 사용하는 사람이 여행을 완료하고 기획하려는 것을 의미 론적으로 정확하면 해지 경험을 어떻게 처리할지 고려해 볼 가치가 있습니다.
구혼:
두 가지 주요 접근법은 다음과 같습니다.
- 응용 프로그램의 기본 창의 루트보기 컨트롤러 교체
- 기본 흐름과 겹치는 모달 여정으로 온 보딩 흐름을 제시하십시오.
이 구현은 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)
}
}
}