Partilhar via


Várias janelas para iPad

O iOS 13 agora dá suporte a janelas lado a lado para o mesmo aplicativo no iPad. Isso permite novas experiências e interações de arrastar e soltar entre janelas. Este documento mostra como configurar seu aplicativo para dar suporte a esse recurso e apresenta esses novos recursos.

Configuração do Projeto

Para configurar seu projeto para várias janelas, altere o info.plist para declarar NSUserActivityTypes informando ao iOS que seu aplicativo manipulará atividades desse tipo e UIApplicationSceneManifest habilitará UIApplicationSupportsMultipleScenes para várias janelas e UISceneConfigurations associará sua cena a um 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>

Abrindo várias janelas

Com seu aplicativo aberto e em execução em um iPad, há algumas maneiras de abrir várias janelas desse aplicativo que o iOS manipula como padrão.

  • App Expose – toque no ícone do aplicativo no dock para entrar nesse modo enquanto o aplicativo estiver aberto.
  • Deslizar sobre - arraste o ícone do aplicativo do encaixe sobre a parte superior do aplicativo em execução para ter uma janela flutuante.
  • Tela dividida – arraste o ícone do aplicativo do encaixe até a borda da tela do iPad para criar uma nova janela lado a lado.

Interações adicionais para entrar em um modo de várias janelas estão disponíveis em seu aplicativo.

Arrastar do Aplicativo – use uma interação de arrastar em seu aplicativo para iniciar um novo NSUserActivity , assim como arrastar o ícone do aplicativo em exemplos anteriores.

Ao usar uma interação de arrastar e soltar, você cria um NSUserActivity e associa os dados a serem passados para a nova janela que está solicitando que o iOS abra para você.

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

No código acima, o objeto de selectedPhoto modelo tem um método para retornar um NSUserActivity chamado OpenDetailUserActivity(). Quando o gesto de arrastar estiver concluído, o UIDragItem com apresentará o userActivity por meio do NSItemProvider.

Ações Explícitas – gestos do usuário em botões ou links oferecem a capacidade de abrir uma nova janela.

No , UIApplication você pode iniciar um novo UISceneSession chamando RequestSceneSessionActivation. Se uma cena existente já existir, você deverá usá-la. Por padrão, uma nova cena será criada para você.

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

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

Neste exemplo, o userActivity é o único valor passado para o RequestSceneSessionActivation método para abrir uma nova janela do aplicativo com base em uma ação explícita do usuário; nesse caso, um ItemSelected manipulador de um UICollectionView.