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
.