適用於 iPad 的多視窗
iOS 13 現在支援 iPad 上相同應用程式的並存視窗。 這可在視窗之間啟用新的體驗和拖放互動。 本文件說明如何設定應用程式以支援這項功能,並介紹這些新功能。
項目組態
若要為多個視窗設定您的專案,請修改 info.plist
以宣告NSUserActivityTypes
告訴 iOS 您的應用程式會處理此類型的活動,並啟用UIApplicationSupportsMultipleScenes
多個視窗,並將UIApplicationSceneManifest
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
從 ,您可以呼叫 RequestSceneSessionActivation
來啟動新的 UISceneSession
。 如果現有的場景已經存在,您應該使用該場景。 根據預設,系統會為您建立新的場景。
public void ItemSelected(UICollectionView collectionView, NSIndexPath indexPath)
{
var userActivity = selectedPhoto.OpenDetailUserActivity ();
UIApplication.SharedApplication.RequestSceneSessionActivation(
sceneSession: null,
userActivity: userActivity,
options: null,
errorHandler: null
);
}
在此範例中, userActivity
是傳遞至 RequestSceneSessionActivation
方法的唯一值,以便根據明確的使用者動作開啟應用程式的新視窗;在此案例中為 ItemSelected
的 UICollectionView
處理程式。