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 UIApplicationSceneManifest
UISceneConfigurations
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 UIDragItem
userActivity
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
.