Bagikan melalui


Beberapa jendela untuk iPad

iOS 13 sekarang mendukung jendela berdampingan untuk aplikasi yang sama di iPad. Ini memungkinkan pengalaman baru dan interaksi seret dan letakkan antar jendela. Dokumen ini menunjukkan kepada Anda cara menyiapkan aplikasi untuk mendukung fitur ini, dan memperkenalkan fitur baru ini.

Konfigurasi Proyek

Untuk mengonfigurasi proyek Anda untuk beberapa jendela, tambahkan info.plist untuk menyatakan NSUserActivityTypes memberi tahu iOS, aplikasi Anda akan menangani aktivitas jenis ini, dan UIApplicationSceneManifest untuk mengaktifkan UIApplicationSupportsMultipleScenes beberapa jendela dan UISceneConfigurations mengaitkan adegan Anda dengan papan cerita.

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

Membuka Beberapa Windows

Dengan aplikasi Anda terbuka dan berjalan di iPad, ada beberapa cara untuk membuka beberapa jendela app yang ditangani iOS menjadi default.

  • App Expose - ketuk ikon aplikasi di dock untuk memasuki mode ini saat aplikasi Anda terbuka.
  • Slide Over - seret ikon aplikasi dari dock di atas aplikasi yang sedang berjalan untuk memiliki jendela mengambang.
  • Pisahkan Layar - seret ikon app dari dock ke tepi layar iPad untuk membuat jendela berdampingan baru.

Interaksi tambahan untuk memasuki mode beberapa jendela tersedia dari dalam aplikasi Anda.

Seret dari Aplikasi - gunakan interaksi seret dalam aplikasi Anda untuk memulai yang baru NSUserActivity seperti menyeret ikon aplikasi Anda dalam contoh sebelumnya.

Saat menggunakan interaksi seret dan letakkan, Anda membuat NSUserActivity dan mengaitkan data yang akan diteruskan ke jendela baru yang Anda minta iOS buka untuk Anda.

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

Dalam kode di atas, selectedPhoto objek model memiliki metode untuk mengembalikan yang NSUserActivity disebut OpenDetailUserActivity(). Ketika gerakan seret selesai, UIDragItem dengan menyajikan userActivity melalui NSItemProvider.

Tindakan Eksplisit - gerakan pengguna pada tombol atau tautan menawarkan kemampuan untuk membuka jendela baru.

Dari Anda UIApplication dapat memulai yang baru UISceneSession dengan memanggil RequestSceneSessionActivation. Jika adegan yang ada sudah ada, Anda harus menggunakannya. Secara default, adegan baru akan dibuat untuk Anda.

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

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

Dalam contoh ini, userActivity adalah satu-satunya nilai yang diteruskan ke RequestSceneSessionActivation metode untuk membuka jendela baru aplikasi berdasarkan tindakan pengguna eksplisit; dalam hal ItemSelected ini handler dari UICollectionView.