Buscar..


Introducción

A menudo es útil presentar una experiencia de primera ejecución a los nuevos usuarios de su aplicación. Esto podría deberse a varios motivos, como pedirles que inicien sesión (si es necesario para su situación), explicar cómo usar la aplicación o simplemente informarles sobre nuevas funciones en una actualización (como lo hacen Notas, Fotos y Música). iOS11).

Observaciones

En primer lugar, cuando se trata de flujos múltiples, aquí es donde los guiones gráficos se pueden usar de manera efectiva. Por defecto, su aplicación utiliza Main.storyboard para su flujo primario. Su flujo de incorporación / alternativa puede estar contenido en un guión gráfico secundario, por ejemplo. Onboarding.storyboard

Esto tiene una serie de ventajas:

  • en un equipo de desarrolladores, el trabajo en cada flujo de usuario se puede separar
  • control de fuente más claro (git)
  • separación de intereses

Cuando se inicie su aplicación, puede determinar qué flujo debe presentarse. La lógica para esto puede estar contenida en su AppDelegate:

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

Para mostrar el flujo de Onboarding, vale la pena considerar cómo le gustaría manejar la experiencia de descartarlo una vez que la persona que lo utiliza ha completado el viaje, y que es semánticamente correcto para lo que está tratando de crear.

Enfoques:

Los dos enfoques principales son:

  1. Intercambia el controlador de vista raíz de la ventana principal de la aplicación
  2. Presente el flujo de Onboarding como un viaje modal, superponiendo el flujo principal.

La implementación de esto debe estar contenida en una extensión de AppDelegate.

Opción 1: intercambiar el controlador de vista de raíz (bueno)

El cambio del controlador de vista de raíz tiene ventajas, aunque las opciones de transición están limitadas a las admitidas por UIViewAnimationOptions , por lo que, dependiendo de cómo desee hacer la transición entre flujos, puede significar que tiene que implementar una transición personalizada, lo que puede ser engorroso.

Puede mostrar el flujo de Onboarding simplemente configurando UIApplication.shared.keyWindow.rootViewController

El despido se maneja utilizando UIView.transition(with:) y pasando el estilo de transición como UIViewAnimationOptions , en este caso, Cross Dissolve. (También se admiten tirones y rizos).

También debe establecer el marco de la vista Principal antes de volver a la misma, ya que lo está creando por primera vez.

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

Opción 2: Presentar el flujo alternativo de manera modal (mejor)

En la implementación más sencilla, el flujo de Onboarding se puede presentar simplemente en un contexto modal, ya que semánticamente el Usuario está en un solo viaje.

[Directrices de la interfaz humana de Apple - Modalidad] [1]:

Considere crear un contexto modal solo cuando sea fundamental captar la atención de alguien, cuándo debe completarse o abandonarse una tarea para continuar usando la aplicación o para guardar información importante.

La presentación moderada permite la opción simple de despido al final del viaje, con poco del recorrido de los controladores de intercambio.

Las transiciones personalizadas también se admiten de forma estándar, ya que utiliza la 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow