Freigeben über


Mehrere Fenster für iPad

iOS 13 unterstützt jetzt parallele Fenster für dieselbe App auf dem iPad. Dies ermöglicht neue Erfahrungen und Drag-and-Drop-Interaktionen zwischen Fenstern. In diesem Dokument erfahren Sie, wie Sie Ihre Anwendung zur Unterstützung dieses Features einrichten, und diese neuen Features werden vorgestellt.

Projektkonfiguration

Um Ihr Projekt für mehrere Fenster zu konfigurieren, ändern Sie die, um zu info.plist deklarieren NSUserActivityTypes , dass iOS Ihre App Aktivitäten dieses Typs verarbeitet, und UIApplicationSceneManifest um mehrere Fenster zu aktivieren UIApplicationSupportsMultipleScenes und UISceneConfigurations Ihre Szene einem Storyboard zuzuordnen.

<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>

Öffnen mehrerer Fenster

Wenn Ihre App auf einem iPad geöffnet und ausgeführt wird, gibt es mehrere Möglichkeiten, mehrere Fenster dieser App, die iOS verarbeitet, standardmäßig zu öffnen.

  • App Verfügbar machen : Tippen Sie im Dock auf das App-Symbol, um in diesen Modus zu wechseln, während Ihre App geöffnet ist.
  • Slide Over : Ziehen Sie das App-Symbol aus dem Dock über den oberen Rand Ihrer ausgeführten App, um ein schwebendes Fenster zu erhalten.
  • Geteilter Bildschirm : Ziehen Sie das App-Symbol vom Dock an den Rand des iPad-Bildschirms, um ein neues paralleles Fenster zu erstellen.

Zusätzliche Interaktionen zum Wechseln in einen Modus mit mehreren Fenstern sind in Ihrer Anwendung verfügbar.

Aus App ziehen : Verwenden Sie eine Ziehinteraktion innerhalb Ihrer App, um ein neues NSUserActivity zu starten, genau wie das Ziehen des App-Symbols in früheren Beispielen.

Wenn Sie eine Drag-and-Drop-Interaktion verwenden, erstellen Sie ein NSUserActivity und ordnen die Daten dem neuen Fenster zu, das Sie iOS für Sie öffnen möchten.

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 };
}

Im obigen Code verfügt das selectedPhoto Modellobjekt über eine -Methode, um einen NSUserActivity namens OpenDetailUserActivity()zurückzugeben. Wenn die Ziehgeste abgeschlossen ist, ist die UIDragItem mit über userActivityNSItemProvidervorhanden.

Explizite Aktionen : Benutzergesten auf Schaltflächen oder Links bieten die Möglichkeit, ein neues Fenster zu öffnen.

Über können UIApplication Sie eine neue UISceneSession starten, indem Sie aufrufen RequestSceneSessionActivation. Wenn bereits eine vorhandene Szene vorhanden ist, sollten Sie diese verwenden. Standardmäßig wird eine neue Szene für Sie erstellt.

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

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

In diesem Beispiel ist der userActivity einzige Wert, der an die RequestSceneSessionActivation -Methode übergeben wird, um ein neues Fenster der Anwendung basierend auf einer expliziten Benutzeraktion zu öffnen. In diesem Fall ein ItemSelected Handler eines UICollectionView.