Compartir a través de


Varias ventanas para iPad

iOS 13 ahora admite ventanas en paralelo para la misma aplicación en iPad. Esto permite nuevas experiencias e interacciones de arrastrar y colocar entre ventanas. En este documento, se muestra cómo configurar la aplicación para que admita esta característica y se presentan estas nuevas características.

Configuración del proyecto

Para configurar el proyecto para varias ventanas, modifique el archivo info.plist para declarar NSUserActivityTypes e indicar a iOS que la aplicación controlará las actividades de este tipo y UIApplicationSceneManifest para habilitar varias ventanas UIApplicationSupportsMultipleScenes y UISceneConfigurations para asociar la escena a un guión gráfico.

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

Apertura de varias ventanas

Con la aplicación abierta y en ejecución en un iPad, hay varias maneras de abrir varias ventanas de esa aplicación que iOS controla de manera predeterminada.

  • Exponer la aplicación: pulse el icono de la aplicación en el dock para entrar en este modo mientras la aplicación está abierta.
  • Deslizar hacia arriba: arrastre el icono de la aplicación desde el dock sobre la parte superior de la aplicación en ejecución para tener una ventana flotante.
  • Pantalla dividida: arrastre el icono de la aplicación desde el dock hasta el borde de la pantalla del iPad para crear una nueva ventana en paralelo.

Hay interacciones adicionales para entrar en modo de varias ventanas en la aplicación.

Arrastrar desde la aplicación: use una interacción de arrastre dentro de la aplicación para iniciar un nuevo elemento NSUserActivity del mismo modo que al arrastrar el icono de la aplicación en ejemplos anteriores.

Al usar una interacción de arrastrar y colocar, se crea un elemento NSUserActivity y se asocian los datos que se van a pasar a la nueva ventana que está solicitando a iOS que abra.

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

En el código anterior, el objeto de modelo selectedPhoto tiene un método para devolver un elemento NSUserActivity llamado OpenDetailUserActivity(). Una vez completado el gesto de arrastre, UIDragItem presentará el elemento userActivity mediante NSItemProvider.

Acciones explícitas: los gestos de usuario en botones o vínculos ofrecen la posibilidad de abrir una nueva ventana.

Desde el elemento UIApplication, puede iniciar un nuevo elemento UISceneSession mediante una llamada a RequestSceneSessionActivation. Si ya existe una escena existente, debe usarla. De manera predeterminada, se creará una nueva escena automáticamente.

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

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

En este ejemplo, userActivity es el único valor que se pasa al método RequestSceneSessionActivation para abrir una nueva ventana de la aplicación en función de una acción de usuario explícita; en este caso, un controlador ItemSelected de un elemento UICollectionView.