Использование нескольких окон для iPad

IOS 13 теперь поддерживает параллельные окна для того же приложения на iPad. Это обеспечивает новые возможности и взаимодействие перетаскивания между окнами. В этом документе показано, как настроить приложение для поддержки этой функции и ознакомиться с этими новыми функциями.

Конфигурация проекта

Чтобы настроить проект для нескольких окон, измените info.plistNSUserActivityTypes объявление о том, что приложение iOS будет обрабатывать действия этого типа, а UIApplicationSceneManifest также включить UIApplicationSupportsMultipleScenes для нескольких окон и UISceneConfigurations связать сцену с раскадровкой.

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

Открытие нескольких окон

При открытии и запуске приложения на iPad существует несколько способов открытия нескольких окон этого приложения, которые обрабатываются iOS по умолчанию.

  • Предоставление приложения— коснитесь значка приложения в док-станции, чтобы ввести этот режим во время открытия приложения.
  • Слайд сверху — перетащите значок приложения из док-станции в верхней части работающего приложения, чтобы иметь плавающее окно.
  • Разделение экрана — перетащите значок приложения из док-станции на край экрана iPad, чтобы создать новое параллельное окно.

Дополнительные взаимодействия для входа в режим нескольких окон доступны в приложении.

Перетаскивание из приложения — используйте взаимодействие перетаскивания в приложении, чтобы запустить новый NSUserActivity , как перетаскивание значка приложения в предыдущих примерах.

При использовании взаимодействия перетаскивания вы создаете NSUserActivity и связываете данные, передаваемые вместе с новым окном, для открытия 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 };
}

В приведенном выше selectedPhoto коде объект модели имеет метод для возврата вызываемого OpenDetailUserActivity()NSUserActivity объекта. После завершения жеста перетаскивания отображается UIDragItemuserActivity с помощью NSItemProvider.

Явные действия — пользовательские жесты на кнопках или ссылках предлагают возможность открыть новое окно.

UIApplication С нового можно начать UISceneSession с помощью вызоваRequestSceneSessionActivation. Если существующая сцена уже существует, следует использовать это. По умолчанию для вас будет создана новая сцена.

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

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

В этом примере единственным значением, передаваемым методу, userActivity является открытие нового окна приложения на основе явного действия пользователя; в данном случае ItemSelected обработчик объектаUICollectionView.RequestSceneSessionActivation