Condividi tramite


Più finestre per iPad

iOS 13 supporta ora finestre affiancate per la stessa app su iPad. Ciò consente nuove esperienze e interazioni di trascinamento della selezione tra finestre. Questo documento illustra come configurare l'applicazione per supportare questa funzionalità e presenta queste nuove funzionalità.

Configurazione progetto

Per configurare il progetto per più finestre, modificare per info.plist dichiarare NSUserActivityTypes che l'app iOS gestirà le attività di questo tipo e per abilitare UIApplicationSupportsMultipleScenes più finestre e UIApplicationSceneManifestUISceneConfigurations associare la scena a uno 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>

Apertura di più finestre

Con l'app aperta e in esecuzione in un iPad, esistono alcuni modi per aprire più finestre dell'app gestite da iOS come predefinita.

  • Esposizione app: toccare l'icona dell'app nel dock per accedere a questa modalità mentre l'app è aperta.
  • Slide Over : trascinare l'icona dell'app dal dock sopra la parte superiore dell'app in esecuzione per avere una finestra mobile.
  • Split Screen :trascina l'icona dell'app dal dock al bordo della schermata dell'iPad per creare una nuova finestra affiancata.

Le interazioni aggiuntive per accedere a una modalità a più finestre sono disponibili all'interno dell'applicazione.

Trascinare dall'app : usare un'interazione di trascinamento all'interno dell'app per avviare una nuova NSUserActivity operazione come il trascinamento dell'icona dell'app negli esempi precedenti.

Quando si usa un'interazione di trascinamento della selezione, si crea un oggetto NSUserActivity e si associano i dati da passare alla nuova finestra in cui viene chiesto di aprire iOS.

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

Nel codice precedente, l'oggetto selectedPhoto modello ha un metodo per restituire un NSUserActivity oggetto denominato OpenDetailUserActivity(). Al termine del movimento di trascinamento, con presente l'oggetto UIDragItemuserActivity tramite .NSItemProvider

Azioni esplicite: i movimenti dell'utente sui pulsanti o i collegamenti offrono la possibilità di aprire una nuova finestra.

UIApplication Da è possibile avviare un nuovo UISceneSession oggetto chiamando RequestSceneSessionActivation. Se esiste già una scena esistente, è consigliabile usarla. Per impostazione predefinita, verrà creata automaticamente una nuova scena.

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

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

In questo esempio, userActivity è l'unico valore passato al metodo per aprire una nuova finestra dell'applicazione in base a RequestSceneSessionActivation un'azione utente esplicita; in questo caso un ItemSelected gestore di un oggetto UICollectionView.