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
.