Multitarea para iPad en Xamarin.iOS

iOS 9 admite dos aplicaciones que se ejecutan al mismo tiempo, mediante diapositivas o vistas divididas. También admite la reproducción de vídeo picture-in-Picture.

Split Screen ExamplePicture-in-Picture Example

iOS 9 agrega compatibilidad con varias tareas para ejecutar dos aplicaciones al mismo tiempo en hardware iPad específico. La multitarea para iPad se admite mediante las siguientes características:

  • Deslizar: permite al usuario ejecutar temporalmente una segunda aplicación de iOS en un panel deslizante (ya sea en el lado derecho o izquierdo de la pantalla, en función de la dirección del idioma) que abarca aproximadamente el 25 % de la aplicación principal actualmente en ejecución. Deslizar solo está disponible en iPad Pro, iPad Air, iPad Air 2, iPad Mini 2, iPad Mini 3 o iPad Mini 4.
  • Vista dividida: solo en hardware de iPad compatible (iPad Air 2, iPad Mini 4 e iPad Pro) el usuario puede elegir una segunda aplicación y ejecutarla en paralelo con la aplicación actualmente en ejecución en un modo de pantalla dividida. El usuario puede controlar el porcentaje de la pantalla principal que ocupa cada aplicación.
  • Imagen dentro de imagen: en el caso de las aplicaciones que reproducen contenido de vídeo, el vídeo ahora se puede reproducir en una ventana móvil y que se puede cambiar tamaño que flota sobre las demás aplicaciones que se ejecutan actualmente en el dispositivo iOS. El usuario tiene control total sobre el tamaño y la posición de esta ventana. Imagen dentro de imagen solo está disponible en iPad Pro, iPad Air, iPad Air 2, iPad Mini 2, iPad Mini 3 o iPad Mini 4.

Hay varias cosas que se deben tener en cuenta al admitir la multitarea en la aplicación, entre las que se incluyen:

Como desarrollador de aplicaciones, también puede optar por no realizar varias tareas, incluida la deshabilitación de la reproducción de vídeo PIP.

En este artículo se tratarán los pasos necesarios para asegurarse de que la aplicación de Xamarin.iOS se ejecuta correctamente en un entorno de multitarea o cómo optar por no realizar varias tareas si no es una buena opción para la aplicación.

Multitarea para vídeo de iPad

Inicio rápido con varias tareas

Para admitir diapositivas o vistas divididas, la aplicación debe hacer lo siguiente:

  • Se compila con iOS 9 (o superior).
  • Use un Guión gráfico para su pantalla de inicio (y no para los recursos de imagen).
  • Use un guión gráfico con clases de tamaño y de autolayout para su interfaz de usuario.
  • Admite todas las 4 orientaciones del dispositivo iOS (vertical, vertical, vertical, horizontal izquierda y horizontal derecha).

Acerca de multitarea para iPad

iOS 9 ofrece nuevas capacidades multitarea en iPad con la introducción de diapositivas, vista dividida (solo iPad Air 2, iPad Mini 4 y iPad Pro) y Imagen en imagen. Veremos con más detalle estas características en las secciones siguientes.

Deslizar sobre

La característica Deslizar sobre permite al usuario elegir una segunda aplicación y mostrarla en un pequeño panel deslizante para proporcionar una interacción rápida. El panel Deslizar sobre es temporal y se cerrará cuando el usuario vuelva a trabajar con la aplicación principal.

The Slide Over panel

Lo principal que hay que recordar es que el usuario decide qué dos aplicaciones se ejecutarán en paralelo y que el desarrollador no tiene control sobre este proceso. Como resultado, hay algunas cosas que debe hacer para asegurarse de que la aplicación Xamarin.iOS se ejecuta correctamente en un panel Deslizar sobre:

  • Usar clases de tamaño y autolayout: dado que la aplicación de Xamarin.iOS ahora se puede ejecutar en el panel lateral de diapositivas , ya no puede confiar en el dispositivo, su tamaño de pantalla o su orientación para diseñar la interfaz de usuario. Para asegurarse de que la aplicación escala correctamente la interfaz, deberá usar las clases Autolayout y Size. Para obtener más información, consulte la documentación Introducción a los guiones gráficos unificados .
  • Usar recursos de forma eficaz: dado que la aplicación ahora puede compartir el sistema con otra aplicación en ejecución, es fundamental que la aplicación use recursos del sistema de forma eficaz. Cuando la memoria se dispersa, el sistema finalizará automáticamente la aplicación que consume la mayor parte de la memoria. Consulte la Guía de eficiencia energética de Apple para aplicaciones de iOS para obtener más detalles.

Deslizar solo está disponible en iPad Pro, iPad Air, iPad Air 2, iPad Mini 2, iPad Mini 3 o iPad Mini 4. Para obtener más información sobre cómo preparar la aplicación para diapositivas, consulta la documentación sobre la adopción de mejoras multitarea de Apple en iPad .

Vista en dos paneles

En el hardware iPad compatible (solo iPad Air 2, iPad Mini 4 e iPad Pro), el usuario puede elegir una segunda aplicación y ejecutarla en paralelo con la aplicación que se está ejecutando actualmente en un modo de pantalla dividida. El usuario puede controlar el porcentaje de la pantalla principal que ocupa cada aplicación arrastrando un divisor en pantalla.

The Split View

Al igual que la diapositiva, el usuario decide qué dos aplicaciones se ejecutarán en paralelo y de nuevo, el desarrollador no tiene control sobre este proceso. Como resultado, La vista dividida coloca requisitos similares en una aplicación de Xamarin.iOS:

  • Usar clases de tamaño y autolayout: dado que la aplicación de Xamarin.iOS ahora se puede ejecutar en un modo de pantalla dividida en el tamaño especificado del usuario, ya no puede confiar en el dispositivo, su tamaño de pantalla o su orientación para diseñar la interfaz de usuario. Para asegurarse de que la aplicación escala correctamente la interfaz, deberá usar las clases Autolayout y Size. Para obtener más información, consulte la documentación Introducción a los guiones gráficos unificados .
  • Usar recursos de forma eficaz: dado que la aplicación ahora puede compartir el sistema con otra aplicación en ejecución, es fundamental que la aplicación use recursos del sistema de forma eficaz. Cuando la memoria se dispersa, el sistema finalizará automáticamente la aplicación que consume la mayor parte de la memoria. Consulte la Guía de eficiencia energética de Apple para aplicaciones de iOS para obtener más detalles.

Para obtener más información sobre cómo preparar la aplicación para la vista dividida, consulta la documentación sobre la adopción de mejoras multitarea de Apple en iPad .

Imagen en imagen

La nueva característica Imagen en imagen (también conocida como PIP) permite al usuario ver un vídeo en una ventana pequeña flotante que el usuario puede colocar en cualquier parte de la pantalla encima de otras aplicaciones en ejecución.

An example Picture in Picture floating window

Al igual que con la diapositiva sobre y la vista dividida, el usuario tiene control total sobre cómo ver un vídeo en el modo Imagen en imagen. Si la función principal de la aplicación es ver vídeo, necesitará alguna modificación para comportarse correctamente en modo PIP. De lo contrario, no se requiere ningún cambio para admitir PIP.

Para que la aplicación muestre vídeo PIP en la solicitud del usuario, deberá usar AVKit o las API de AV Foundation. El marco de Reproductor multimedia se ha depreciado en iOS 9 y no admite PIP.

Imagen dentro de imagen solo está disponible en iPad Pro, iPad Air, iPad Air 2, iPad Mini 2, iPad Mini 3 o iPad Mini 4. Para obtener más información, consulte nuestra aplicación de ejemplo PictureInPicture y la imagen de Apple en la documentación de inicio rápido de imagen.

Compatibilidad con multitarea en la aplicación

Para cualquier aplicación de Xamarin.iOS existente, admitir la multitarea es una tarea transparente siempre que la aplicación ya siga las guías de diseño de Apple y los procedimientos recomendados para iOS 8. Esto significa que la aplicación debe usar guiones gráficos con autolayout y clases de tamaño para sus diseños de interfaz de usuario (consulta nuestra Introducción a guiones gráficos unificados para obtener más información).

Para estas aplicaciones, se requieren poco o ningún cambio para admitir multitarea y para que se comporte bien dentro de ella. Si la interfaz de usuario de la aplicación, se creó con otros métodos, como colocar y ajustar el tamaño de los elementos de la interfaz de usuario directamente en el código de C#, o si se basa en tamaños o orientaciones de pantalla de dispositivo específicos, necesitará una modificación significativa para admitir la multitarea de iOS 9 correctamente.

Para admitir la multitarea de iOS 9 en cualquier nueva aplicación de Xamarin.iOS, use de nuevo guiones gráficos con clases de autolayout y tamaño para todos los diseños de la interfaz de usuario de la aplicación e implemente las instrucciones de las secciones siguientes.

Consideraciones sobre el tamaño y la orientación de la pantalla

Antes de iOS 9, podría diseñar la aplicación con tamaños y orientaciones de pantalla de dispositivo específicos. Dado que una aplicación ahora se puede ejecutar en un panel Deslice o en modo vista dividida, puede encontrarse ejecutándose en una clase de tamaño horizontal compacta o normal en iPad, independientemente de la orientación física o el tamaño de pantalla del dispositivo.

Screen Size and Orientation Considerations

En un iPad, una aplicación de pantalla completa tiene clases de tamaño horizontal y vertical normales. Todos los i Teléfono pero los i Teléfono 6 Plus e i Teléfono 6s Plus, tienen clases tamaño compacto en ambas direcciones en cualquier orientación. El i Teléfono 6 Plus y i Teléfono 6s Plus en modo horizontal tienen una clase de tamaño horizontal regular y una clase de tamaño vertical compacto (como un iPad Mini).

En iPads que admiten diapositivas y vistas divididas, puedes terminar con las siguientes combinaciones:

Orientación Aplicación principal Aplicación secundaria
Vertical 75 % de la pantalla
Compact Horizontal
Vertical normal
25 % de la pantalla
Compact Horizontal
Vertical normal
Horizontal 75 % de la pantalla
Horizontal normal
Vertical normal
25 % de la pantalla
Compact Horizontal
Vertical normal
Horizontal 50 % de la pantalla
Compact Horizontal
Vertical normal
50 % de la pantalla
Compact Horizontal
Vertical normal

En la aplicación MuliTask de ejemplo, si se ejecuta en pantalla completa en un iPad en el modo horizontal, presentará la lista y la vista de detalles al mismo tiempo:

The list and the detail view presented at the same time

Si la misma aplicación se ejecuta en un panel Deslizar sobre, se dispone como una clase de tamaño horizontal compacto y solo muestra la lista:

Only the list presented when the device is horizontal

Para asegurarse de que la aplicación se comporta correctamente en estas situaciones, debe adoptar colecciones de rasgos junto con las clases de tamaño y cumplir las IUIContentContainer interfaces y IUITraitEnvironment . Consulte la referencia de clase UITraitCollection de Apple y nuestra guía Introducción a los guiones gráficos unificados para obtener más información.

Además, ya no puedes confiar en los límites de pantalla de los dispositivos para definir el área visible de la aplicación, deberás usar los límites de ventana de la aplicación en su lugar. Dado que los límites de la ventana están totalmente bajo el control del usuario, no puede ajustarlos mediante programación ni impedir que el usuario cambie estos límites.

Por último, la aplicación debe usar un archivo de guión gráfico para presentar su pantalla de inicio en lugar de usar un conjunto de archivos de imagen de .png y admitir las cuatro orientaciones de interfaz (Vertical, Vertical, Vertical, Horizontal Izquierda y Horizontal Derecha) que se deben tener en cuenta para ejecutarse en un panel Deslizar o en modo vista dividida.

Métodos abreviados de teclado de hardware personalizados

En iOS 9 que se ejecuta en un iPad, Apple tiene compatibilidad ampliada con teclados de hardware. Los iPads siempre han incluido compatibilidad básica con teclado externo a través de Bluetooth y algunos fabricantes de teclado crearon teclados que incluían teclas específicas de iOS cableadas.

Ahora, con iOS 9, las aplicaciones pueden crear sus propios métodos abreviados de teclado personalizados. Además, algunos métodos abreviados de teclado básicos están disponibles como Command-C (copy), Command-X (cut), Command-V (paste) y Command-Shift-H (home), sin que una aplicación se escriba específicamente para responder a ellos.

La pestaña Comandos abrirá un conmutador de aplicación que permite al usuario cambiar rápidamente entre aplicaciones desde el teclado, de forma muy similar al sistema operativo Mac:

The app switcher

Si una aplicación de iOS 9 incluye métodos abreviados de teclado, el usuario puede mantener presionadas las teclas Comando, Opción o Control para mostrarlas en un elemento emergente:

Screenshot shows the keyboard shortcuts for an app.

Definición de métodos abreviados de teclado personalizados

Si agregamos el código siguiente a un controlador de vista o vista en nuestra aplicación, cuando esa vista o controlador esté visible, estará disponible un método abreviado de teclado personalizado:

#region Custom Keyboard Shortcut
public override bool CanBecomeFirstResponder {
    get { return true; }
}

public override UIKeyCommand[] KeyCommands {
    get {

        var keyCommand = UIKeyCommand.Create (new NSString("n"), UIKeyModifierFlags.Command, new Selector ("NewEntry"), new NSString("New Entry"));
        return new UIKeyCommand[]{ keyCommand };
    }
}

[Export("NewEntry")]
public void NewEntry() {

    // Add a new entry
    ...

}
#endregion

En primer lugar, invalidamos la CanBecomeFirstResponder propiedad y devuelvemos true para que el controlador de vista o vista pueda recibir la entrada del teclado.

A continuación, invalidamos la KeyCommands propiedad y creamos un nuevo UIKeyCommand para la pulsación de tecla Command-N . Cuando se activa la pulsación de tecla, llamamos al NewEntry método (que exponemos a iOS 9 mediante el Export comando) para realizar la acción solicitada.

Si ejecutamos esta aplicación en un iPad con un teclado de hardware conectado y el usuario escribe Command-N, se agregará una nueva entrada a la lista. Si el usuario mantiene presionada la tecla Comando , se mostrará la lista de accesos directos:

Screenshot shows the New Entry shortcut for an app.

Consulte la aplicación MultiTask de ejemplo para obtener una implementación de ejemplo.

Consideraciones sobre la administración de recursos

Incluso para las aplicaciones que ya usan las guías de diseño y los procedimientos recomendados de iOS 8, la administración eficaz de recursos podría seguir siendo un problema. En iOS 9, las aplicaciones ya no tienen uso exclusivo de memoria, CPU u otros recursos del sistema.

Como resultado, debe ajustar la aplicación de Xamarin.iOS para usar los recursos del sistema de forma eficaz o se enfrenta a la terminación en situaciones de memoria baja. Esto es igualmente cierto en las aplicaciones que no tienen varias tareas, ya que una segunda aplicación podría seguir ejecutándose en un panel Diapositiva sobre el panel o una imagen en la ventana Imagen que requiere recursos adicionales o hacer que la frecuencia de actualización caiga por debajo de 60 fotogramas por segundo.

Tenga en cuenta las siguientes acciones de usuario y sus implicaciones:

  • Escribir texto en un panel Deslizar sobre: incluso si la aplicación no tiene entrada de texto, el teclado del sistema ahora se puede mostrar a través de su interfaz de usuario. Como resultado, es posible que la aplicación tenga que responder a las notificaciones de visualización del teclado (como mostrar y ocultar el teclado).
  • Ejecutar una segunda aplicación en un panel Deslizar sobre: la nueva aplicación ahora se ejecuta en primer plano y compite con la aplicación existente para los recursos del sistema, como la memoria y los ciclos de CPU.
  • Reproducir un vídeo en una ventana PIP: no solo puede esta ventana cubrir parte de la interfaz de la aplicación, sino que la aplicación que inició el vídeo todavía se está ejecutando en segundo plano y consume recursos de CPU y memoria.

Para asegurarse de que la aplicación usa recursos de forma eficaz, debe hacer lo siguiente:

  • Generar perfiles de la aplicación con Instruments : compruebe las fugas de memoria, el uso de CPU y las áreas en las que la aplicación podría estar bloqueando el subproceso principal.
  • Responder a los métodos de transición de estado: en el archivo de AppDelegate.cs invalidación y respuesta a los métodos de cambio de estado, como la aplicación que entra o devuelve desde segundo plano. Libere cualquier recurso no requerido, como imágenes, datos o vistas y controlador de vistas.
  • Probar en paralelo con aplicaciones con uso intensivo de memoria: ejecute la aplicación con diapositivas y vista dividida en hardware físico de iOS con una aplicación con un uso intensivo de memoria, como Mapas (en modo de vista satélite) y pruebe que ambas aplicaciones siguen respondiendo y no se bloquean.

Consulte la Guía de eficiencia energética de Apple para aplicaciones iOS para obtener más información sobre la administración de recursos.

No participar en la multitarea

Aunque Apple sugiere que todas las aplicaciones de iOS 9 admiten varias tareas, puede haber motivos muy específicos para una aplicación, como juegos o aplicaciones de cámara que requieren que la pantalla completa funcione correctamente.

Para que la aplicación de Xamarin.iOS no se ejecute en un panel de diapositivas o en el modo Vista dividida, edite el archivo Info.plist del proyecto y active Requiere pantalla completa:

Opting Out of Multitasking

Importante

Si bien no participar en la multitarea impide que la aplicación se ejecute en diapositivas o vista dividida, no impide que otra aplicación se ejecute en diapositivas o en un vídeo imagen en imagen que se muestre junto con la aplicación.

Deshabilitación de la reproducción de vídeo PIP

En la mayoría de las situaciones, la aplicación debe permitir al usuario reproducir cualquier contenido de vídeo que se muestre en una ventana flotante Imagen en imagen. Sin embargo, puede haber situaciones en las que esto podría no ser deseado, como vídeos de escena de corte de juego.

Para no participar en la reproducción de vídeo PIP, haga lo siguiente en la aplicación:

  • Si usa para AVPlayerViewController mostrar vídeo, establezca la AllowsPictureInPicturePlayback propiedad falseen .
  • Si usa para mostrar el AVPlayerLayer vídeo, no cree una instancia de .AVPictureInPictureController
  • Si usa para WKWebView mostrar vídeo, establezca la AllowsPictureInPictureMediaPlayback propiedad falseen .

Resumen

En este artículo se han descrito los pasos necesarios para asegurarse de que una aplicación de Xamarin.iOS se ejecutará y se comportará correctamente en la nueva capacidad multitarea de iOS 9 para iPads. Además, cubre la exclusión de varias tareas para las aplicaciones en las que no es una buena opción.