Zoeken…


Invoering

Het is vaak handig om een nieuwe ervaring voor nieuwe gebruikers van uw app te presenteren. Dit kan om een aantal redenen zijn, zoals ze vragen zich aan te melden (indien nodig voor uw situatie), uitleggen hoe de app te gebruiken of ze gewoon informeren over nieuwe functies in een update (zoals Notes, Foto's en Muziek doen in iOS11).

Opmerkingen

Ten eerste, omdat u te maken heeft met meerdere stromen, kunnen Storyboards hier effectief worden gebruikt. Standaard gebruikt uw toepassing Main.storyboard voor uw primaire stroom. Uw onboarding / alternatieve stroom kan worden opgenomen in een secundair storyboard, bijvoorbeeld. Onboarding.storyboard

Dit heeft een aantal voordelen:

  • in een team van ontwikkelaars kan het werk aan elke gebruikersstroom worden gescheiden
  • duidelijkere broncontrole (git)
  • scheiding van zorgen

Wanneer uw app wordt gestart, kunt u bepalen welke stroom moet worden gepresenteerd. De logica hiervoor kan worden opgenomen in uw AppDelegate:

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

Om de Onboarding-flow te laten zien, is het de moeite waard om te overwegen hoe je de ervaring van het ontslaan wilt verwerken zodra de persoon die het gebruikt de reis heeft voltooid, en die semantisch correct is voor wat je probeert te creëren.

benaderingen:

De twee belangrijkste benaderingen zijn:

  1. Wissel de rootweergavecontroller van het hoofdvenster van de app uit
  2. Presenteer de Onboarding-stroom als een modale reis, die de hoofdstroom overlapt.

De implementatie hiervan moet worden opgenomen in een uitbreiding van AppDelegate.

Optie 1: Swap de Root View Controller (goed)

Er zijn voordelen aan het schakelen van de UIViewAnimationOptions controller, hoewel de overgangsopties beperkt zijn tot die ondersteund door UIViewAnimationOptions , dus afhankelijk van hoe u wilt overschakelen tussen stromen, moet u wellicht een aangepaste overgang implementeren - wat omslachtig kan zijn.

U kunt de Onboarding-stroom weergeven door eenvoudig de UIApplication.shared.keyWindow.rootViewController

Ontslag wordt afgehandeld door UIView.transition(with:) en de overgangsstijl door te geven als een UIViewAnimationOptions , in dit geval Cross Dissolve. (Flips en krullen worden ook ondersteund).

Je moet ook het kader van de hoofdweergave instellen voordat je er weer naartoe gaat, omdat je het voor de eerste keer instantieert.

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

Optie 2: presenteer alternatieve stroom modaal (beter)

In de meest eenvoudige implementatie kan de Onboarding-stroom eenvoudig worden gepresenteerd in een modale context, omdat de gebruiker semantisch op een enkele reis is.

[Richtlijnen voor menselijke interface van Apple - Modaliteit] [1]:

Overweeg alleen een modale context te maken wanneer het van cruciaal belang is om iemands aandacht te trekken, wanneer een taak moet worden voltooid of verlaten om de app te blijven gebruiken of om belangrijke gegevens op te slaan.

Modaal presenteren maakt de eenvoudige optie van ontslag aan het einde van de reis mogelijk, met weinig van het ruilen van controllers.

Aangepaste overgangen worden ook op de standaard manier ondersteund, omdat dit de ViewController.present() API gebruikt:

// 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow