Ricerca…


introduzione

È spesso utile presentare un'esperienza di prima esecuzione ai nuovi utenti della tua app. Questo potrebbe essere per un numero qualsiasi di motivi, come chiedere loro di accedere (se necessario per la tua situazione), spiegare come utilizzare l'App o semplicemente informarli di nuove funzionalità in un aggiornamento (come Notes, Photos e Music do in iOS11).

Osservazioni

In primo luogo, poiché hai a che fare con flussi multipli, è qui che gli storyboard possono essere usati efficacemente. Per impostazione predefinita, l'applicazione utilizza Main.storyboard per il flusso principale. Il tuo onboarding / flusso alternativo può essere contenuto in uno storyboard secondario, ad es. Onboarding.storyboard

Questo ha una serie di vantaggi:

  • in un team di sviluppatori, il lavoro su ciascun flusso di utenti può essere separato
  • controllo sorgente più chiaro (git)
  • separazione degli interessi

Quando la tua app si avvia, puoi determinare quale flusso deve essere presentato. La logica per questo può essere contenuta nel tuo AppDelegate:

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

Per mostrare il flusso di Onboarding, vale la pena considerare come vorresti gestire l'esperienza di licenziamento una volta che la persona che lo usa ha completato il viaggio e che è semanticamente corretto per ciò che stai cercando di creare.

approcci:

I due approcci principali sono:

  1. Scambia il controller della vista radice della finestra principale dell'app
  2. Presenta il flusso di bordo come un viaggio modale, sovrapponendo il flusso principale.

L'implementazione di questo dovrebbe essere contenuta in un'estensione di AppDelegate.

Opzione 1: scambia il controller di visualizzazione radice (buono)

Ci sono dei vantaggi nel cambiare il controller della vista radice, sebbene le opzioni di transizione siano limitate a quelle supportate da UIViewAnimationOptions , quindi a seconda di come desideri passare tra i flussi potrebbe significare che devi implementare una transizione personalizzata, che può essere complicata.

È possibile mostrare il flusso di UIApplication.shared.keyWindow.rootViewController semplicemente impostando UIApplication.shared.keyWindow.rootViewController

Il licenziamento viene gestito utilizzando UIView.transition(with:) e passando lo stile di transizione come UIViewAnimationOptions , in questo caso Cross Dissolve. (Anche Flip e ricci sono supportati).

Devi anche impostare la cornice della vista principale prima di ricollegarti ad essa, mentre la installi per la prima volta.

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

Opzione 2: presentare il flusso alternativo in modo modale (migliore)

Nell'implementazione più semplice, il flusso di Onboarding può essere semplicemente presentato in un contesto modale, poiché semanticamente l'utente si trova su un singolo percorso.

[Linee guida per l'interfaccia umana Apple - Modalità] [1]:

Prendi in considerazione la possibilità di creare un contesto modale solo quando è fondamentale attirare l'attenzione di qualcuno, quando un'attività deve essere completata o abbandonata per continuare a utilizzare l'app o per salvare dati importanti.

La presentazione modale consente la semplice opzione di licenziamento alla fine del viaggio, con un po 'di cruft di controller di scambio.

Le transizioni personalizzate sono supportate anche nel modo standard, poiché utilizza l'API ViewController.present() :

// 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow