Wiele okien na tabletach iPad

System iOS 13 obsługuje teraz równoległe okna dla tej samej aplikacji na urządzeniu iPad. Umożliwia to nowe środowiska i interakcje przeciągania i upuszczania między oknami. W tym dokumencie pokazano, jak skonfigurować aplikację do obsługi tej funkcji i przedstawić te nowe funkcje.

Konfiguracja projektu

Aby skonfigurować projekt dla wielu okien, zmień element info.plist , aby zadeklarować, NSUserActivityTypes że system iOS będzie obsługiwać działania tego typu, oraz UIApplicationSceneManifest włączyć UIApplicationSupportsMultipleScenes dla wielu okien i UISceneConfigurations skojarzyć scenę z scenorysem.

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

Otwieranie wielu okien

Po otwarciu i uruchomieniu aplikacji na urządzeniu iPad istnieje kilka sposobów otwierania wielu okien tej aplikacji, która obsługuje system iOS jako domyślną.

  • Uwidacznianie aplikacji — naciśnij ikonę aplikacji w doku, aby wprowadzić ten tryb podczas otwierania aplikacji.
  • Przesuń w górę — przeciągnij ikonę aplikacji z obszaru Docka na górę uruchomionej aplikacji, aby utworzyć przestawne okno.
  • Ekran podzielony — przeciągnij ikonę aplikacji z obszaru Dock do krawędzi ekranu tabletu iPad, aby utworzyć nowe okno obok siebie.

Dodatkowe interakcje umożliwiające wprowadzenie trybu wielu okien są dostępne z poziomu aplikacji.

Przeciągnij z aplikacji — użyj interakcji przeciągania w aplikacji, aby rozpocząć nową NSUserActivity aplikację tak samo jak przeciąganie ikony aplikacji w poprzednich przykładach.

W przypadku korzystania z interakcji przeciągania i upuszczania należy utworzyć NSUserActivity element i skojarzyć dane, które mają zostać przekazane do nowego okna z prośbą o otwarcie systemu iOS.

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

W powyższym selectedPhoto kodzie obiekt modelu ma metodę zwracającą wywołaną OpenDetailUserActivity()metodę NSUserActivity . Po zakończeniu gestu przeciągania za UIDragItemuserActivity pomocą NSItemProviderelementu .

Jawne akcje — gesty użytkownika na przyciskach lub linkach oferują możliwość otwierania nowego okna.

UIApplication Za pomocą polecenia możesz rozpocząć nowąUISceneSession, wywołując polecenie RequestSceneSessionActivation. Jeśli istniejąca scena już istnieje, należy jej użyć. Domyślnie zostanie utworzona nowa scena.

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

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

W tym przykładzie userActivity wartość jest jedyną wartością przekazaną do RequestSceneSessionActivation metody w celu otwarcia nowego okna aplikacji na podstawie jawnej akcji użytkownika. W tym przypadku ItemSelected procedura obsługi obiektu UICollectionView.