Recherche…


Introduction

Il est souvent utile de présenter une première expérience aux nouveaux utilisateurs de votre application. Cela peut être pour un certain nombre de raisons, telles que les inviter à se connecter (si requis pour votre situation), expliquer comment utiliser l'application ou simplement les informer des nouvelles fonctionnalités d'une mise à jour (comme le font Notes, Photos et Musique). iOS11).

Remarques

Tout d'abord, comme vous traitez de multiples flux, c'est là que les Storyboards peuvent être utilisés efficacement. Par défaut, votre application utilise Main.storyboard pour votre flux principal. Votre flux d'intégration / alternatif peut être contenu dans un storyboard secondaire, par exemple. Onboarding.storyboard

Cela présente de nombreux avantages:

  • dans une équipe de développeurs, le travail sur chaque flux utilisateur peut être séparé
  • contrôle de source plus clair (git)
  • séparation des préoccupations

Lorsque votre application se lance, vous pouvez déterminer quel flux doit être présenté. La logique pour cela peut être contenue dans votre AppDelegate:

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

Pour afficher le flux d'intégration, il est utile de se demander comment gérer l'expérience de le rejeter une fois que le client l'a terminé et qui est sémantiquement correct pour ce que vous essayez de créer.

Approches:

Les deux approches principales sont:

  1. Permuter le contrôleur de vue racine de la fenêtre principale de l'application
  2. Présenter le flux d'intégration en tant que parcours modal, chevauchant le flux principal.

L'implémentation de ceci devrait être contenue dans une extension à AppDelegate.

Option 1: permuter le contrôleur de vue racine (bon)

Il y a des avantages à changer de contrôleur de vue racine, même si les options de transition sont limitées à celles prises en charge par UIViewAnimationOptions .

Vous pouvez afficher le flux d'intégration en définissant simplement UIApplication.shared.keyWindow.rootViewController

Le licenciement est géré en utilisant UIView.transition(with:) et en transmettant le style de transition sous la forme d'un UIViewAnimationOptions , en l'occurrence Cross Dissolve. (Flips et Curls sont également supportés).

Vous devez également définir le cadre de la vue principale avant d'y revenir, car vous l'instanciez pour la première fois.

// 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: Flux alternatif actuel modéré (meilleur)

Dans l'implémentation la plus simple, le flux d'intégration peut simplement être présenté dans un contexte modal, puisque l'utilisateur est sémantiquement sur un seul trajet.

[Directives relatives à l'interface utilisateur Apple - Modalité] [1]:

Pensez à créer un contexte modal uniquement lorsqu'il est essentiel d'attirer l'attention de quelqu'un, lorsqu'une tâche doit être terminée ou abandonnée pour continuer à utiliser l'application ou pour enregistrer des données importantes.

La présentation modale permet la simple option de licenciement en fin de parcours, avec peu de ressources sur les contrôleurs de permutation.

Les transitions personnalisées sont également prises en charge de manière standard, car cela utilise 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow