Multitâche pour iPad dans Xamarin.iOS

iOS 9 prend en charge deux applications s’exécutant en même temps, à l’aide d’une diapositive sur ou d’une vue fractionnée. Il prend également en charge la lecture vidéo picture-in-Picture.

Split Screen ExamplePicture-in-Picture Example

iOS 9 ajoute la prise en charge multitâche pour l’exécution de deux applications en même temps sur du matériel iPad spécifique. Le multitâche pour iPad est pris en charge via les fonctionnalités suivantes :

  • Diapositive vers le haut : permet à l’utilisateur d’exécuter temporairement une deuxième application iOS dans un panneau de diapositive sortant (à droite ou à gauche de l’écran en fonction de la direction de la langue) qui couvre environ 25 % de l’application principale en cours d’exécution. Slide Over est disponible uniquement sur un iPad Pro, iPad Air, iPad Air 2, iPad Mini 2, iPad Mini 3 ou iPad Mini 4.
  • Mode fractionné - Sur le matériel iPad pris en charge (iPad Air 2, iPad Mini 4 et iPad Pro uniquement), l’utilisateur peut choisir une deuxième application et l’exécuter côte à côte avec l’application en cours d’exécution en mode fractionné. L’utilisateur peut contrôler le pourcentage de l’écran principal occupé par chaque application.
  • Image dans Image : pour les applications qui lisent du contenu vidéo, la vidéo peut désormais être lue dans une fenêtre déplaçable et redimensionnable qui flotte sur les autres applications en cours d’exécution sur l’appareil iOS. L’utilisateur a un contrôle total sur la taille et la position de cette fenêtre. L’image dans Image est disponible uniquement sur un iPad Pro, iPad Air, iPad Air 2, iPad Mini 2, iPad Mini 3 ou iPad Mini 4.

Il existe plusieurs éléments à prendre en compte lors de la prise en charge du multitâche dans votre application, notamment :

En tant que développeur d’applications, vous pouvez également refuser le multitâche, notamment désactiver la lecture vidéo PIP.

Cet article décrit les étapes requises pour vous assurer que votre application Xamarin.iOS s’exécute correctement dans un environnement multitâche ou comment désactiver le multitâche s’il n’est pas adapté à votre application.

Vidéo multitâche pour iPad

Démarrage rapide multitâche

Pour prendre en charge la diapositive sur ou le mode Fractionné, votre application doit effectuer les opérations suivantes :

  • Être généré sur iOS 9 (ou version ultérieure).
  • Utilisez un storyboard pour son écran de lancement (et non pour les ressources d’image).
  • Utilisez un storyboard avec des classes de superposition automatique et de taille pour son interface utilisateur.
  • Prendre en charge toutes les 4 orientations d’appareil iOS (Portrait, Portrait à l’envers, Paysage gauche et Paysage droit).

À propos du multitâche pour iPad

iOS 9 offre de nouvelles capacités multitâche sur iPad avec l’introduction de Slide Over, Split View (iPad Air 2, iPad Mini 4 et iPad Pro uniquement) et Picture in Picture. Nous allons examiner de plus près ces fonctionnalités dans les sections suivantes.

Glisser vers le dessus

La fonctionnalité De diapositive permet à l’utilisateur de choisir une deuxième application et de l’afficher dans un petit panneau glissant pour fournir une interaction rapide. Le panneau Diapositives est temporaire et se ferme lorsque l’utilisateur revient à travailler avec l’application principale.

The Slide Over panel

La principale chose à retenir est que l’utilisateur décide quelles applications seront exécutées côte à côte et que le développeur n’a aucun contrôle sur ce processus. Par conséquent, vous devez effectuer quelques opérations pour vous assurer que votre application Xamarin.iOS s’exécute correctement dans un panneau Diapositives :

  • Utilisez les classes de superposition automatique et de taille : étant donné que votre application Xamarin.iOS peut désormais être exécutée dans le panneau latéral déroulant, vous ne pouvez plus vous appuyer sur l’appareil, sa taille d’écran ou son orientation pour mettre en page votre interface utilisateur. Pour vous assurer que votre application met à l’échelle correctement son interface, vous devez utiliser les classes de superposition automatique et de taille. Pour plus d’informations, consultez notre documentation Introduction aux storyboards unifiés .
  • Utilisez efficacement les ressources . Étant donné que votre application peut désormais partager le système avec une autre application en cours d’exécution, il est essentiel que votre application utilise efficacement les ressources système. Lorsque la mémoire devient éparse, le système met automatiquement fin à l’application qui consomme le plus de mémoire. Pour plus d’informations, consultez le Guide d’efficacité énergétique d’Apple pour iOS Apps .

Slide Over est disponible uniquement sur un iPad Pro, iPad Air, iPad Air 2, iPad Mini 2, iPad Mini 3 ou iPad Mini 4. Pour en savoir plus sur la préparation de votre application pour Slide Over, consultez la documentation Sur l’adoption des améliorations multitâche d’Apple sur iPad .

Mode Fractionné

Sur le matériel iPad pris en charge (iPad Air 2, iPad Mini 4 et iPad Pro uniquement), l’utilisateur peut choisir une deuxième application et l’exécuter côte à côte avec l’application en cours d’exécution en mode écran fractionné. L’utilisateur peut contrôler le pourcentage de l’écran principal occupé par chaque application en faisant glisser un séparateur à l’écran.

The Split View

Comme Slide Over, l’utilisateur décide quelles applications seront exécutées côte à côte et à nouveau, le développeur n’a aucun contrôle sur ce processus. Par conséquent, Split View place des exigences similaires sur une application Xamarin.iOS :

  • Utilisez les classes de superposition automatique et de taille : étant donné que votre application Xamarin.iOS peut désormais être exécutée en mode écran fractionné à la taille spécifiée par l’utilisateur, vous ne pouvez plus compter sur l’appareil, sa taille d’écran ou son orientation pour mettre en page votre interface utilisateur. Pour vous assurer que votre application met à l’échelle correctement son interface, vous devez utiliser les classes de superposition automatique et de taille. Pour plus d’informations, consultez notre documentation Introduction aux storyboards unifiés .
  • Utilisez efficacement les ressources . Étant donné que votre application peut désormais partager le système avec une autre application en cours d’exécution, il est essentiel que votre application utilise efficacement les ressources système. Lorsque la mémoire devient éparse, le système met automatiquement fin à l’application qui consomme le plus de mémoire. Pour plus d’informations, consultez le Guide d’efficacité énergétique d’Apple pour iOS Apps .

Pour en savoir plus sur la préparation de votre application pour Split View, consultez la documentation sur l’adoption des améliorations multitâche d’Apple sur iPad .

Image dans Image

La nouvelle fonctionnalité Image dans Image (également appelée PIP) permet à l’utilisateur de regarder une vidéo dans une petite fenêtre flottante que l’utilisateur peut positionner n’importe où sur l’écran au-dessus d’autres applications en cours d’exécution.

An example Picture in Picture floating window

Comme avec l’affichage glisser/fractionnement, l’utilisateur a un contrôle total sur l’observation d’une vidéo en mode Image en mode Image. Si la fonction principale de votre application consiste à regarder la vidéo, une modification doit se comporter correctement en mode PIP. Sinon, aucune modification n’est nécessaire pour prendre en charge PIP.

Pour que votre application affiche la vidéo PIP à la demande de l’utilisateur, vous devez utiliser AVKit ou les API AV Foundation. Le framework Lecteur multimédia a été déprécié dans iOS 9 et ne prend pas en charge PIP.

L’image dans Image est disponible uniquement sur un iPad Pro, iPad Air, iPad Air 2, iPad Mini 2, iPad Mini 3 ou iPad Mini 4. Pour plus d’informations, consultez notre exemple d’application PictureInPicture et l’image d’Apple dans la documentation de démarrage rapide Picture.

Prise en charge du multitâche dans votre application

Pour toute application Xamarin.iOS existante, la prise en charge du multitâche est une tâche transparente tant que votre application suit déjà les guides de conception et les meilleures pratiques d’Apple pour iOS 8. Cela signifie que l’application doit utiliser des storyboards avec des classes de superposition automatique et de taille pour ses dispositions d’interface utilisateur (consultez notre présentation des storyboards unifiés pour plus d’informations).

Pour ces applications, peu ou pas de modifications sont nécessaires pour prendre en charge le multitâche et se comporter correctement au sein de celui-ci. Si l’interface utilisateur de votre application a été créée à l’aide d’autres méthodes telles que le positionnement et le dimensionnement directs des éléments d’interface utilisateur dans le code C#, ou s’il s’appuie sur des tailles d’écran ou des orientations spécifiques de l’appareil, il faudra modifier de manière significative pour prendre en charge correctement iOS 9 multitâche.

Pour prendre en charge le multitâche iOS 9 sur n’importe quelle nouvelle application Xamarin.iOS, utilisez à nouveau des storyboards avec des classes de superposition automatique et de taille pour toutes les dispositions de l’interface utilisateur de l’application et implémentez les instructions des sections suivantes.

Considérations relatives à la taille et à l’orientation de l’écran

Avant iOS 9, vous pouvez concevoir votre application sur des tailles et des orientations spécifiques de l’écran de l’appareil. Étant donné qu’une application peut désormais être exécutée dans un panneau Diapositive out ou en mode Mode Split, elle peut se trouver en cours d’exécution dans une classe de taille horizontale compacte ou régulière sur iPad, quelle que soit l’orientation physique ou la taille de l’écran de l’appareil.

Screen Size and Orientation Considerations

Sur un iPad, une application plein écran a des classes de taille horizontale et verticale régulières. Tous les i Téléphone s mais i Téléphone 6 Plus et i Téléphone 6s Plus, ont des classes Taille compacte dans les deux sens dans n’importe quelle orientation. Les i Téléphone 6 Plus et i Téléphone 6s Plus en mode Paysage ont une classe de taille horizontale régulière et une classe de taille verticale compacte (comme un iPad Mini).

Sur les iPad qui prennent en charge le mode Glisser/fractionnement, vous pouvez obtenir les combinaisons suivantes :

Orientation Application principale Application secondaire
Portrait 75 % de l’écran
Compact Horizontal
Vertical normal
25 % de l’écran
Compact Horizontal
Vertical normal
Paysage 75 % de l’écran
Horizontal normal
Vertical normal
25 % de l’écran
Compact Horizontal
Vertical normal
Paysage 50 % de l’écran
Compact Horizontal
Vertical normal
50 % de l’écran
Compact Horizontal
Vertical normal

Dans l’exemple d’application MuliTask , s’il est exécuté en plein écran sur un iPad en mode paysage, il présente à la fois la liste et l’affichage des détails en même temps :

The list and the detail view presented at the same time

Si la même application est exécutée dans un panneau De diapositives, elle est disposée en tant que classe de taille horizontale compacte et affiche uniquement la liste :

Only the list presented when the device is horizontal

Pour vous assurer que votre application se comporte correctement dans ces situations, vous devez adopter des collections de caractéristiques avec des classes de taille et se conformer aux interfaces et IUITraitEnvironment aux IUIContentContainer interfaces. Pour plus d’informations, consultez la référence de la classe UITraitCollection d’Apple et notre guide d’introduction aux storyboards unifiés.

En outre, vous ne pouvez plus vous appuyer sur les limites de l’écran des appareils pour définir la zone visible de l’application, vous devez utiliser les limites de fenêtre de votre application à la place. Étant donné que les limites de fenêtre sont entièrement sous le contrôle de l’utilisateur, vous ne pouvez pas les ajuster par programmation ou empêcher l’utilisateur de modifier ces limites.

Enfin, votre application doit utiliser un fichier storyboard pour présenter son écran de lancement par opposition à l’utilisation d’un ensemble de fichiers image .png et prendre en charge les quatre orientations de l’interface (Portrait à l’envers, Portrait à l’envers, Paysage gauche et Paysage droit) à prendre en compte pour l’exécution dans un panneau diapositive ou en mode Mode Fractionné.

Raccourcis clavier matériel personnalisés

Dans iOS 9 s’exécutant sur un iPad, Apple a étendu la prise en charge des claviers matériels. Les iPad ont toujours inclus la prise en charge du clavier externe de base via Bluetooth et certains fabricants de clavier ont créé des claviers qui incluaient des touches spécifiques à iOS câblées en dur.

Maintenant, avec iOS 9, les applications peuvent créer leurs propres raccourcis clavier personnalisés. En outre, certains raccourcis clavier de base sont disponibles comme Command-C (copie), Command-X (couper), Command-V (coller) et Command-Shift-H (accueil), sans qu’une application soit spécifiquement écrite pour y répondre.

L’onglet Commande affiche un sélecteur d’application qui permet à l’utilisateur de basculer rapidement entre les applications à partir du clavier, comme mac OS :

The app switcher

Si une application iOS 9 inclut des raccourcis clavier, l’utilisateur peut conserver la touche Commande, Option ou Contrôle pour les afficher dans une fenêtre contextuelle :

Screenshot shows the keyboard shortcuts for an app.

Définition de raccourcis clavier personnalisés

Si nous ajoutons le code suivant à un contrôleur d’affichage ou de vue dans notre application, lorsque cette vue ou contrôleur est visible, un raccourci clavier personnalisé sera disponible :

#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

Tout d’abord, nous substituons la CanBecomeFirstResponder propriété et revenons true afin que le contrôleur d’affichage ou de vue puisse recevoir une entrée au clavier.

Ensuite, nous substituons la KeyCommands propriété et créons une nouvelle UIKeyCommand pour la séquence de touches Command-N . Lorsque la séquence de touches est activée, nous appelons la NewEntry méthode (que nous exposons à iOS 9 à l’aide de la Export commande) pour effectuer l’action demandée.

Si nous exécutons cette application sur un iPad avec un clavier matériel attaché et que l’utilisateur tape Command-N, une nouvelle entrée sera ajoutée à la liste. Si l’utilisateur reste enfoncé sur la touche Commande , la liste des raccourcis s’affiche :

Screenshot shows the New Entry shortcut for an app.

Consultez l’exemple d’application MultiTask pour obtenir un exemple d’implémentation.

Considérations relatives à la gestion des ressources

Même pour les applications qui utilisent déjà les guides de conception d’iOS 8 et les meilleures pratiques, une gestion efficace des ressources peut encore être un problème. Dans iOS 9, les applications n’ont plus d’utilisation exclusive de la mémoire, du processeur ou d’autres ressources système.

Par conséquent, vous devez affiner votre application Xamarin.iOS pour utiliser efficacement les ressources système ou faire face à l’arrêt dans des situations de mémoire faible. Cela est tout aussi vrai pour les applications qui optent pour le multitâche, car une deuxième application peut toujours être exécutée dans un panneau diapositive ou une image dans la fenêtre Image nécessitant des ressources supplémentaires ou provoquant le taux d’actualisation inférieur à 60 images par seconde.

Tenez compte des actions utilisateur suivantes et de leurs implications :

  • Entrée de texte dans un panneau De diapositive - Même si votre application n’a pas d’entrée de texte, le clavier système peut désormais être affiché sur son interface utilisateur. Par conséquent, l’application peut avoir besoin de répondre aux notifications d’affichage du clavier (telles que l’affichage et le masquage du clavier).
  • Exécution d’une deuxième application dans un panneau Diapositive - La nouvelle application s’exécute désormais au premier plan et est en concurrence avec l’application existante pour les ressources système telles que les cycles de mémoire et d’UC.
  • Lecture d’une vidéo dans une fenêtre PIP : non seulement cette fenêtre couvre une partie de l’interface de votre application, mais l’application qui a lancé la vidéo est toujours en cours d’exécution en arrière-plan et consomme des ressources processeur et mémoire.

Pour vous assurer que votre application utilise efficacement des ressources, vous devez effectuer les opérations suivantes :

  • Profilez l’application avec instruments : vérifiez les fuites de mémoire, l’utilisation excessive du processeur et les zones où l’application peut bloquer le thread principal.
  • Répondre aux méthodes de transition d’état : dans votre AppDelegate.cs remplacement de fichier et réponse aux méthodes de modification d’état, telles que l’entrée ou le retour de l’application à partir de l’arrière-plan. Libèrez toutes les ressources non indispensables telles que les images, les données ou les vues et le contrôleur de vue.
  • Test côte à côte avec des applications nécessitant beaucoup de mémoire : exécutez votre application à l’aide de Slide Out et de Split View sur du matériel iOS physique avec une application gourmande en mémoire telle que Cartes (en mode Vue satellite) et testez que les deux applications restent réactives et ne se bloquent pas.

Pour plus d’informations sur la gestion des ressources, consultez le Guide d’efficacité énergétique d’Apple pour iOS Apps .

Désactivation de l’option multitâche

Bien qu’Apple suggère que toutes les applications iOS 9 prennent en charge le multitâche, il peut y avoir des raisons très spécifiques pour une application non trop, comme les jeux ou les applications de caméra qui nécessitent que l’écran complet fonctionne correctement.

Pour que votre application Xamarin.iOS ne soit pas exécutée dans un panneau Diapositive sortante ou en mode Mode Mode Fractionné, modifiez le fichier Info.plist du projet et case activée nécessite l’écran plein écran :

Opting Out of Multitasking

Important

Lors de la désactivation de l’option multitâche, votre application ne peut pas s’exécuter en mode Diapositive sortant ou Fractionné, mais elle n’empêche pas l’exécution d’une autre application dans Slide Out ou une image dans la vidéo Image en même temps que votre application.

Désactivation de la lecture vidéo PIP

Dans la plupart des cas, votre application doit permettre à l’utilisateur de lire tout contenu vidéo qu’il affiche dans une image dans une fenêtre flottante Image. Toutefois, il peut y avoir des situations où cela peut ne pas être souhaité, comme les vidéos de scène coupées de jeu.

Pour désactiver la lecture vidéo PIP, procédez comme suit dans votre application :

  • Si vous utilisez une AVPlayerViewController vidéo pour afficher la vidéo, définissez la AllowsPictureInPicturePlayback propriété falsesur .
  • Si vous utilisez la AVPlayerLayer vidéo pour afficher la vidéo, n’instanciez pas un AVPictureInPictureController.
  • Si vous utilisez une WKWebView vidéo pour afficher la vidéo, définissez la AllowsPictureInPictureMediaPlayback propriété falsesur .

Résumé

Cet article a abordé les étapes requises pour vous assurer qu’une application Xamarin.iOS s’exécutera et se comportera correctement dans la nouvelle capacité multitâche d’iOS 9 pour les iPad. En outre, il a couvert l’opting-out de multitâche pour les applications où il n’est pas un bon ajustement.