Использование нескольких окон для iPad
IOS 13 теперь поддерживает параллельные окна для того же приложения на iPad. Это обеспечивает новые возможности и взаимодействие перетаскивания между окнами. В этом документе показано, как настроить приложение для поддержки этой функции и ознакомиться с этими новыми функциями.
Конфигурация проекта
Чтобы настроить проект для нескольких окон, измените info.plist
NSUserActivityTypes
объявление о том, что приложение 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
объекта. После завершения жеста перетаскивания отображается UIDragItem
userActivity
с помощью 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