다음을 통해 공유


IPad용 다중 창

이제 iOS 13은 iPad에서 동일한 앱에 대해 병렬 창을 지원합니다. 이렇게 하면 창 간에 새로운 환경과 끌어서 놓기 상호 작용이 가능합니다. 이 문서에서는 이 기능을 지원하도록 애플리케이션을 설정하는 방법을 보여 줍니다. 이러한 새로운 기능을 소개합니다.

프로젝트 구성

여러 창에 대해 프로젝트를 구성하려면 앱이 이러한 유형의 활동을 처리할 것이라고 iOS에 선언 NSUserActivityTypes 하고 여러 창에 사용하도록 설정하고 UIApplicationSupportsMultipleScenes 장면을 스토리보드와 UISceneConfigurations 연결하도록 수정 info.plistUIApplicationSceneManifest 합니다.

<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입니다.