Partager via


Plusieurs fenêtres pour iPad

iOS 13 prend désormais en charge les fenêtres côte à côte pour la même application sur iPad. Cela permet de nouvelles expériences et des interactions glisser-déplacer entre les fenêtres. Ce document vous montre comment configurer votre application pour prendre en charge cette fonctionnalité et présente ces nouvelles fonctionnalités.

Configuration du projet

Pour configurer votre projet pour plusieurs fenêtres, modifiez le info.plist pour déclarer NSUserActivityTypes que votre application à iOS gérera les activités de ce type, et UIApplicationSceneManifest pour activer UIApplicationSupportsMultipleScenes plusieurs fenêtres et UISceneConfigurations pour associer votre scène à un storyboard.

<key>NSUserActivityTypes</key>
<array>
    <string>com.xamarin.Gallery.openDetail</string>
</array>
<key>UIApplicationSceneManifest</key>
<dict>
    <key>UIApplicationSupportsMultipleScenes</key>
    <true/>
    <key>UISceneConfigurations</key>
    <dict>
        <key>UIWindowSceneSessionRoleApplication</key>
        <array>
            <dict>
                <key>UISceneConfigurationName</key>
                <string>Default Configuration</string>
                <key>UISceneDelegateClassName</key>
                <string>SceneDelegate</string>
                <key>UISceneStoryboardFile</key>
                <string>Main</string>
            </dict>
        </array>
    </dict>
</dict>

Ouverture de plusieurs fenêtres

Avec votre application ouverte et en cours d’exécution sur un iPad, il existe plusieurs façons d’ouvrir plusieurs fenêtres de cette application que iOS gère par défaut.

  • Exposition d’application : appuyez sur l’icône de l’application dans le dock pour passer à ce mode lorsque votre application est ouverte.
  • Glisser sur : faites glisser l’icône de l’application à partir du dock sur le haut de votre application en cours d’exécution pour avoir une fenêtre flottante.
  • Écran fractionné : faites glisser l’icône de l’application de la station d’accueil vers le bord de l’écran de l’iPad pour créer une nouvelle fenêtre côte à côte.

Des interactions supplémentaires permettant d’entrer en mode plusieurs fenêtres sont disponibles à partir de votre application.

Faire glisser à partir de l’application : utilisez une interaction de glisser au sein de votre application pour démarrer une nouvelle NSUserActivity , comme en faisant glisser l’icône de votre application dans les exemples précédents.

Lorsque vous utilisez une interaction glisser-déplacer, vous créez un NSUserActivity et associez les données à transmettre à la nouvelle fenêtre que vous demandez à iOS d’ouvrir pour vous.

public UIDragItem [] GetItemsForBeginningDragSession (UICollectionView collectionView, IUIDragSession session, NSIndexPath indexPath)
{
    var selectedPhoto = GetPhoto (indexPath);

    var userActivity = selectedPhoto.OpenDetailUserActivity ();
    var itemProvider = new NSItemProvider (UIImage.FromFile (selectedPhoto.Name));
    itemProvider.RegisterObject (userActivity, NSItemProviderRepresentationVisibility.All);

    var dragItem = new UIDragItem (itemProvider) {
        LocalObject = selectedPhoto
    };

    return new [] { dragItem };
}

Dans le code ci-dessus, l’objet selectedPhoto modèle a une méthode pour retourner un NSUserActivity appelé OpenDetailUserActivity(). Lorsque le mouvement de glissement est terminé, le UIDragItem avec présente le userActivity via le NSItemProvider.

Actions explicites : les mouvements de l’utilisateur sur des boutons ou des liens offrent la possibilité d’ouvrir une nouvelle fenêtre.

À partir du UIApplication , vous pouvez démarrer un nouveau UISceneSession en appelant RequestSceneSessionActivation. Si une scène existante existe déjà, vous devez l’utiliser. Par défaut, une nouvelle scène sera créée pour vous.

public void ItemSelected(UICollectionView collectionView, NSIndexPath indexPath)
{
    var userActivity = selectedPhoto.OpenDetailUserActivity ();

    UIApplication.SharedApplication.RequestSceneSessionActivation(
        sceneSession: null,
        userActivity: userActivity,
        options: null,
        errorHandler: null
    );
}

Dans cet exemple, est userActivity la seule valeur passée à la RequestSceneSessionActivation méthode afin d’ouvrir une nouvelle fenêtre de l’application en fonction d’une action utilisateur explicite ; dans ce cas, un ItemSelected gestionnaire d’un UICollectionView.