IPad 용 다중 창Multiple windows for iPad

이제 iOS 13은 iPad의 동일한 앱에 대해 side-by-side 창을 지원 합니다.iOS 13 now supports side-by-side windows for the same app on iPad. 그러면 windows 간에 새로운 환경 및 끌어서 놓기 상호 작용을 수행할 수 있습니다.This enables new experiences and drag-and-drop interactions between windows. 이 문서에서는이 기능을 지원 하도록 응용 프로그램을 설정 하는 방법을 보여 주고 이러한 새로운 기능을 소개 합니다.This document shows you how to setup your application to support this feature, and introduces these new features.

프로젝트 구성Project Configuration

info.plist 여러 창 UIApplicationSceneManifest UIApplicationSupportsMultipleScenes UISceneConfigurations 에 대해 프로젝트를 구성 하려면 앱에서이 형식의 활동을 처리 하 고 여러 창에 대해를 사용 하도록 설정 하 고 NSUserActivityTypes storyboard를 사용 하 여 장면을 만듭니다.To configure your project for multiple windows, amend the info.plist to declare NSUserActivityTypes telling iOS your app will handle activities of this type, and UIApplicationSceneManifest to enable UIApplicationSupportsMultipleScenes for multiple windows and UISceneConfigurations to associate your scene with a storyboard.

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

여러 창 열기Opening Multiple Windows

앱이 열려 있고 iPad에서 실행 되는 경우 iOS에서 기본적으로 처리 하는 해당 앱의 여러 창을 여는 몇 가지 방법이 있습니다.With your app open and running on an iPad, there are a few ways to open multiple windows of that app that iOS handles be default.

  • 앱이 열려 있는 동안 앱에서 dock의 앱 아이콘을 탭 하 여이 모드로 전환 합니다.App Expose - tap the app icon in the dock to enter this mode while your app is open.
  • 위로 이동 -실행 중인 앱의 맨 위에 있는 도크에서 앱 아이콘을 끌어 부동 창을 만듭니다.Slide Over - drag the app icon from the dock over the top of your running app to have a floating window.
  • 화면 분할 -앱 아이콘을 iPad 화면에서 가장자리로 끌어서 놓아 새 side-by-side 창을 만듭니다.Split Screen - drag the app icon from the dock to the edge of the iPad screen to create a new side-by-side window.

여러 창 모드로 전환 하기 위한 추가 상호 작용은 응용 프로그램 내에서 사용할 수 있습니다.Additional interactions to enter a multiple window mode are available from within your application.

앱에서 끌어서 놓기-앱 내에서 끌기 상호 작용을 사용 하 여 NSUserActivity 이전 예제에서 앱 아이콘을 끄는 것과 같은 새를 시작 합니다.Drag from App - use a drag interaction within your app to start a new NSUserActivity just like dragging your app icon in previous examples.

끌어서 놓기 상호 작용을 사용 하는 경우를 만들고 NSUserActivity 해당 데이터를 iOS에서 열도록 요청 하는 새 창에 연결 합니다.When using a drag-and-drop interaction, you create an NSUserActivity and associate the data to be passed along to the new window you're asking iOS to open for you.

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 를 반환 하는 메서드가 있습니다.In the code above, the selectedPhoto model object has a method to return an NSUserActivity called OpenDetailUserActivity(). 끌기 제스처가 완료 UIDragItem 되 면을 userActivity 통해 NSItemProvider를 사용 하 여를 표시 합니다.When the drag gesture is complete, the UIDragItem with present the userActivity via the NSItemProvider.

명시적 작업 -단추나 링크의 사용자 제스처는 새 창을 열 수 있는 기능을 제공 합니다.Explicit Actions - user gestures on buttons or links offer the ability to open a new window.

에서를 UISceneSession 호출RequestSceneSessionActivation하 여 새를 시작할 수 있습니다. UIApplicationFrom the UIApplication you can start a new UISceneSession by calling RequestSceneSessionActivation. 기존 장면이 이미 있는 경우이를 사용 해야 합니다.If an existing scene already exists, you should use that. 기본적으로 새 장면이 생성 됩니다.By default a new scene will be created for you.

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

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

이 예제에서 userActivity 는 명시적 사용자 작업을 기반으로 응용 프로그램의 새 창을 열기 위해 RequestSceneSessionActivation 메서드에 전달 되는 유일한 값입니다 .이 UICollectionView경우 ItemSelected 의 처리기입니다.In this example, the userActivity is the only value passed to the RequestSceneSessionActivation method in order to open a new window of the application based on an explicit user action; in this case an ItemSelected handler of a UICollectionView.