Suche…


Einführung

Es ist oft hilfreich, neuen Benutzern Ihrer App eine erste Erfahrung zu bieten. Dies kann verschiedene Ursachen haben, z. B. die Aufforderung zur Anmeldung (falls dies für Ihre Situation erforderlich ist), die Verwendung der App erklären oder einfach über neue Funktionen in einem Update informieren (z iOS11).

Bemerkungen

Erstens können Sie Storyboards effektiv verwenden, wenn Sie mit mehreren Flows umgehen. Standardmäßig verwendet Ihre Anwendung Main.storyboard für Ihren primären Ablauf. Ihr Onboarding- / Alternativfluss kann in einem sekundären Storyboard enthalten sein, z. Onboarding.storyboard

Das hat eine Reihe von Vorteilen:

  • In einem Team von Entwicklern kann die Arbeit für jeden Benutzerfluss getrennt werden
  • klarere Quellcodeverwaltung (git)
  • Trennung von Bedenken

Wenn Ihre App gestartet wird, können Sie festlegen, welcher Flow angezeigt werden soll. Die Logik dazu kann in Ihrem AppDelegate enthalten sein:

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

Um den Onboarding-Fluss zu zeigen, ist es sinnvoll, darüber nachzudenken, wie Sie mit der Entlassung umgehen möchten, wenn die Person, die sie verwendet, die Reise abgeschlossen hat, und welche semantisch korrekt für das ist, was Sie erstellen möchten.

Ansätze:

Die zwei Hauptansätze sind:

  1. Tauschen Sie den Root-View-Controller des Hauptfensters der App aus
  2. Präsentieren Sie den Onboarding-Flow als modale Reise, wobei Sie den Main-Flow überlappen.

Die Implementierung davon sollte in einer Erweiterung von AppDelegate enthalten sein.

Option 1: Den Root-View-Controller austauschen (gut)

Das Wechseln des Root-View-Controllers bietet Vorteile, auch wenn die Übergangsoptionen auf die von UIViewAnimationOptions unterstützten Optionen beschränkt sind. Abhängig davon, wie Sie den Übergang zwischen Flows UIViewAnimationOptions möchten, müssen Sie möglicherweise einen benutzerdefinierten Übergang implementieren, was mühsam sein kann.

Sie können den Onboarding-Fluss anzeigen, indem Sie einfach den UIApplication.shared.keyWindow.rootViewController

Die Entlassung erfolgt durch Verwendung von UIView.transition(with:) und Übergeben des Übergangsstils als UIViewAnimationOptions , in diesem Fall Cross Dissolve. (Flips und Curls werden ebenfalls unterstützt).

Sie müssen auch den Rahmen der Hauptansicht festlegen, bevor Sie wieder in diese Ansicht wechseln, da Sie sie zum ersten Mal instanziieren.

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

Option 2: Alternativen Fluss modal (besser) präsentieren

Bei der einfachsten Implementierung kann der Onboarding-Fluss einfach in einem modalen Kontext dargestellt werden, da sich der Benutzer semantisch auf einer einzigen Reise befindet.

[Apple Human Interface Guidelines - Modalität] [1]:

Erwägen Sie die Erstellung eines modalen Kontextes nur dann, wenn es entscheidend ist, die Aufmerksamkeit einer Person zu erlangen, wenn eine Aufgabe abgeschlossen oder aufgegeben werden muss, um die App weiterzuverwenden oder wichtige Daten zu speichern.

Die modale Darstellung erlaubt die einfache Möglichkeit der Kündigung am Ende der Reise, wobei nur wenig der Controller ausgetauscht werden muss.

Benutzerdefinierte Übergänge werden ebenfalls standardmäßig unterstützt, da hierfür die ViewController.present() API verwendet wird:

// 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow