iPad için birden çok pencere

iOS 13 artık iPad'de aynı uygulama için yan yana pencereleri destekliyor. Bu, pencereler arasında yeni deneyimler ve sürükleyip bırakma etkileşimleri sağlar. Bu belge, uygulamanızı bu özelliği destekleyecek şekilde nasıl ayarlayabileceğinizi gösterir ve bu yeni özellikleri tanıtır.

Proje Yapılandırması

Projenizi birden çok pencere için yapılandırmak için, iOS'a NSUserActivityTypes uygulamanızın bu tür etkinlikleri işleyeceğini bildirmek ve UIApplicationSceneManifest birden çok pencere için etkinleştirmek UIApplicationSupportsMultipleScenes ve UISceneConfigurations sahnenizi bir görsel taslakla ilişkilendirmek için öğesini düzeltininfo.plist.

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

Birden Çok Pencere Açma

Uygulamanız açık ve bir iPad'de çalışırken, bu uygulamanın iOS'un varsayılan olarak işlediği birden çok pencere açmanın birkaç yolu vardır.

  • Uygulama Kullanıma Sunma - Uygulamanız açıkken bu moda girmek için dock'taki uygulama simgesine dokunun.
  • Slide Over - Kayan bir pencereye sahip olmak için uygulama simgesini çalışan uygulamanızın üst kısmındaki dock'tan sürükleyin.
  • Bölünmüş Ekran - Uygulama simgesini dock'tan iPad ekranının kenarına sürükleyerek yan yana yeni bir pencere oluşturun.

Birden çok pencere moduna geçmek için ek etkileşimler uygulamanızın içinden kullanılabilir.

Uygulamadan sürükleyin- Önceki örneklerde uygulama simgenizi sürüklemek gibi yeni NSUserActivity bir başlangıç yapmak için uygulamanızda sürükleme etkileşimini kullanın.

Sürükle ve bırak etkileşimini kullanırken, iOS'un sizin için açılmasını istediğiniz yeni pencereye geçirilecek verileri oluşturur NSUserActivity ve ilişkilendirirsiniz.

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

Yukarıdaki kodda model nesnesinin selectedPhoto adlı OpenDetailUserActivity()bir NSUserActivity döndürme yöntemi vardır. Sürükleme hareketi tamamlandığında, UIDragItem ile ile aracılığıyla öğesini sunar userActivityNSItemProvider.

Açık Eylemler - Düğmeler veya bağlantılardaki kullanıcı hareketleri yeni bir pencere açabilme olanağı sunar.

'UIApplicationden çağrısı RequestSceneSessionActivationyaparak yeni UISceneSession bir başlangıç yapabilirsiniz. Mevcut bir sahne zaten varsa, bunu kullanmanız gerekir. Varsayılan olarak sizin için yeni bir sahne oluşturulur.

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

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

Bu örnekte, userActivity açık bir kullanıcı eylemine RequestSceneSessionActivation dayalı olarak uygulamanın yeni bir penceresini açmak için yöntemine geçirilen tek değerdir; bu durumda bir ItemSelectedUICollectionViewişleyicisi.