이제 iOS 13은 iPad에서 동일한 앱에 대해 병렬 창을 지원합니다. 이렇게 하면 창 간에 새로운 환경과 끌어서 놓기 상호 작용이 가능합니다. 이 문서에서는 이 기능을 지원하도록 애플리케이션을 설정하는 방법을 보여 줍니다. 이러한 새로운 기능을 소개합니다.
프로젝트 구성
여러 창에 대해 프로젝트를 구성하려면 앱이 이러한 유형의 활동을 처리할 것이라고 iOS에 선언 NSUserActivityTypes
하고 여러 창에 사용하도록 설정하고 UIApplicationSupportsMultipleScenes
장면을 스토리보드와 UISceneConfigurations
연결하도록 수정 info.plist
UIApplicationSceneManifest
합니다.
<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
작업을 시작합니다.
끌어서 놓기 상호 작용을 사용하는 경우 iOS에 열어 달라고 요청하는 새 창에 전달할 데이터를 만들고 NSUserActivity
연결합니다.
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
통해 NSItemProvider
표시됩니다userActivity
.
명시적 작업 - 단추 또는 링크의 사용자 제스처는 새 창을 여는 기능을 제공합니다.
에서 .를 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
입니다.