Multitarea para iPad en Xamarin.iOS
iOS 9 admite dos aplicaciones que se ejecutan al mismo tiempo, mediante deslizar o vista dividida. También admite la reproducción de vídeo de imagen dentro de imagen.
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 su aplicación, entre las que se incluyen:
- Tamaño y orientación de la pantalla
- Métodos abreviados de teclado de hardware personalizados
- Administración de recursos
Como desarrollador de aplicaciones, también puede optar por no permitir la multitarea, 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 permitir la multitarea si no es una buena opción para su aplicación.
Vídeo de multitarea para iPad
Inicio rápido de la multitarea
Para admitir deslizar o vista dividida, la aplicación debe hacer lo siguiente:
- Compilar con iOS 9 (o superior).
- Usar un guion gráfico para su pantalla de inicio (y no para los recursos de imagen).
- Usar un guión gráfico con autodiseño y clases de tamaño para su interfaz de usuario.
- Admitir las 4 orientaciones del dispositivo iOS (vertical, vertical del revés, horizontal izquierda y horizontal derecha).
Sobre la multitarea para iPad
iOS 9 ofrece nuevas capacidades multitarea en iPad con la introducción de deslizar, vista dividida (solo iPad Air 2, iPad Mini 4 y iPad Pro) e Imagen dentro de imagen. Veremos con más detalle estas características en las secciones siguientes.
Deslizar
La característica Deslizar 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 es temporal y se cerrará cuando el usuario vuelva a trabajar con la aplicación principal.
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:
- Usar autodiseño y clases de tamaño: dado que la aplicación de Xamarin.iOS ahora se puede ejecutar en el panel lateral de deslizar, 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 autodiseño y clases de tamaño. Para obtener más información, consulte nuestra documentación de Introducción a 3D Touch.
- 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 consuma la mayor parte de la memoria. Consulte la Guía de eficiencia energética de aplicaciones de iOS de Apple 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 deslizar, consulte la documentación sobre la adopción de mejoras de multitarea en iPad de Apple.
Vista en dos paneles
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 arrastrando un divisor en pantalla.
Igual que a deslizar, el usuario decide qué dos aplicaciones se ejecutarán en paralelo y que el desarrollador tampoco tiene control sobre este proceso. Como resultado, la vista dividida coloca requisitos similares en una aplicación de Xamarin.iOS:
- Usar autodiseño y clases de tamaño: dado que la aplicación de Xamarin.iOS ahora se puede ejecutar en el modo de pantalla dividida en el tamaño especificado por el 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 autodiseño y clases de tamaño. Para obtener más información, consulte nuestra documentación de Introducción a 3D Touch.
- 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 consuma la mayor parte de la memoria. Consulte la Guía de eficiencia energética de aplicaciones de iOS de Apple para obtener más detalles.
Para obtener más información sobre cómo preparar la aplicación para la vista dividida, consulte la documentación sobre la adopción de mejoras de multitarea en iPad de Apple.
Imagen dentro de imagen
La nueva característica de imagen dentro de 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.
Al igual que con deslizar y la vista dividida, el usuario tiene control total sobre cómo ver un vídeo en el modo Imagen dentro de imagen. Si la función principal de la aplicación es ver vídeo, necesitará alguna modificación para que se comporte 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 Media Player se ha quedado en desuso 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 la documentación de Inicio rápido de imagen dentro de imagen de Apple.
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 autodiseño y clases de tamaño para sus diseños de interfaz de usuario (consulte 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 la 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 u 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 autodiseño y clases de 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 deslizar 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.
En un iPad, una aplicación de pantalla completa tiene clases de tamaño horizontal y vertical normales. Todos los iPhones menos el iPhone 6 Plus y el iPhone 6s Plus tienen clases tamaño compacto en ambas direcciones en cualquier orientación. El iPhone 6 Plus y el iPhone 6s Plus en modo horizontal tienen una clase de tamaño horizontal normal y una clase de tamaño vertical compacta (como un iPad Mini).
En iPads que admiten deslizar y vista dividida, puede terminar con las siguientes combinaciones:
Orientación | Aplicación principal | Aplicación secundaria |
---|---|---|
Vertical | 75 % de la pantalla Horizontal compacto Vertical normal |
25 % de la pantalla Horizontal compacto Vertical normal |
Horizontal | 75 % de la pantalla Horizontal normal Vertical normal |
25 % de la pantalla Horizontal compacto Vertical normal |
Horizontal | 50 % de la pantalla Horizontal compacto Vertical normal |
50 % de la pantalla Horizontal compacto Vertical normal |
En la aplicación 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:
Si la misma aplicación se ejecuta en un panel deslizar, se dispone como una clase de tamaño horizontal compacto y solo muestra la lista:
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 interfaces IUIContentContainer
y IUITraitEnvironment
. Consulte la referencia de clase UITraitCollection de Apple y nuestra guía de Introducción a los guiones gráficos unificados para obtener más información.
Además, ya no puede confiar en los límites de pantalla de los dispositivos para definir el área visible de la aplicación, deberá 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 en formato .png y admitir las cuatro orientaciones de interfaz (vertical, vertical del revés, 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 en iPad, Apple tiene soporte extendido 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 Comando-C (copiar), Comando-X (cortar), Comando-V (pegar) y Comando-Mayús-H (inicio), sin que una aplicación se escriba específicamente para responder a ellos.
La pestaña comando abrirá un conmutador de aplicación que permite al usuario cambiar rápidamente entre aplicaciones desde el teclado, de forma muy similar a Mac OS:
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:
Definir métodos abreviados de teclado personalizados
Si agregamos el código siguiente a una vista o controlador de 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 propiedad CanBecomeFirstResponder
y devolvemos true
para que la vista o el controlador de vista pueda recibir la entrada del teclado.
A continuación, invalidamos la propiedad KeyCommands
y creamos un nuevo UIKeyCommand
para la pulsación de la tecla Comando-N. Cuando se activa la pulsación de tecla, llamamos al método NewEntry
(que exponemos a iOS 9 mediante el comando Export
) para realizar la acción solicitada.
Si ejecutamos esta aplicación en un iPad con un teclado de hardware conectado y el usuario escribe Comando-N, se agregará una nueva entrada a la lista. Si el usuario mantiene presionada la tecla Comando, se mostrará la lista de accesos directos:
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 podría cerrarse en situaciones de memoria baja. Pasa igual en las aplicaciones que no admiten la multitarea, ya que una segunda aplicación podría seguir ejecutándose en un panel Deslizar o en una ventana de imagen dentro de 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: incluso si la aplicación no tiene entrada de texto, el teclado del sistema ahora se puede mostrar sobre 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: la nueva aplicación ahora se ejecuta en primer plano y compite con la aplicación existente por 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 instrumentos: compruebe las fugas de memoria, el uso de CPU abierto 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 AppDelegate.cs invalida y responde a los métodos de cambio de estado, como la aplicación que entra o vuelve desde el segundo plano. Libere cualquier recurso no requerido, como imágenes, datos o vistas y controlador de vistas.
- Probar la vista en paralelo con aplicaciones con uso intensivo de memoria: ejecute la aplicación con el modo deslizar y vista dividida en hardware físico de iOS con una aplicación con un uso intensivo de memoria, como Maps (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 para aplicaciones iOS de Apple para obtener más información sobre la administración de recursos.
No admitir la multitarea
Aunque Apple sugiere que todas las aplicaciones de iOS 9 admitan la multitarea, puede haber motivos muy específicos para que una aplicación no lo admita, como juegos o aplicaciones de cámara que requieren que la pantalla completa funcione correctamente.
Para que su aplicación de Xamarin.iOS no se ejecute en un panel deslizar o en el modo vista dividida, edite el archivo Info.plist del proyecto y active Requiere pantalla completa:
Importante
Si bien no admitir la multitarea impide que la aplicación se ejecute en deslizar o vista dividida, no impide que otra aplicación se ejecute en deslizar o en un vídeo de imagen dentro de imagen que se muestre junto con la aplicación.
Deshabilitar 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 de imagen dentro de imagen. Sin embargo, puede haber situaciones en las que esto podría no ser deseado, como vídeos de escenas de cortes de juego.
Para no admitir en la reproducción de vídeo PIP, haga lo siguiente en la aplicación:
- Si usa un
AVPlayerViewController
para mostrar vídeo, establezca la propiedadAllowsPictureInPicturePlayback
enfalse
. - Si usa el
AVPlayerLayer
para mostrar el vídeo, no cree una instancia deAVPictureInPictureController
. - Si usa un
WKWebView
para mostrar vídeo, establezca la propiedadAllowsPictureInPictureMediaPlayback
enfalse
.
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 la multitarea para las aplicaciones en las que no es una buena opción.