Compartilhar via


Multitarefa para iPad no Xamarin.iOS

O iOS 9 suporta dois aplicativos em execução ao mesmo tempo, usando slide over ou split view. Ele também suporta a reprodução de vídeo Picture-In-Picture.

Exemplo de tela divididaExemplo de imagem em imagem

O iOS 9 adiciona suporte multitarefa para executar dois aplicativos ao mesmo tempo em hardware específico do iPad. A multitarefa para iPad é suportada através das seguintes funcionalidades:

  • Slide Over - Permite que o usuário execute temporariamente um segundo aplicativo iOS em um painel deslizante (no lado direito ou esquerdo da tela com base na direção do idioma) que cobre aproximadamente 25% do aplicativo principal em execução no momento. O Slide Over está disponível apenas num iPad Pro, iPad Air, iPad Air 2, iPad Mini 2, iPad Mini 3 ou iPad Mini 4.
  • Split View - No hardware compatível do iPad (apenas iPad Air 2, iPad Mini 4 e iPad Pro), o usuário pode escolher um segundo aplicativo e executá-lo lado a lado com o aplicativo atualmente em execução em um modo de tela dividida. O usuário pode controlar a porcentagem da tela principal que cada aplicativo ocupa.
  • Imagem em Imagem - Para aplicativos que reproduzem conteúdo de vídeo, o vídeo agora pode ser reproduzido em uma janela móvel e redimensionável que flutua sobre os outros aplicativos atualmente em execução no dispositivo iOS. O usuário tem controle total sobre o tamanho e a posição desta janela. O Picture in Picture está disponível apenas num iPad Pro, iPad Air, iPad Air 2, iPad Mini 2, iPad Mini 3 ou iPad Mini 4.

Há várias coisas a serem consideradas ao oferecer suporte a multitarefas em seu aplicativo, incluindo:

Como desenvolvedor de aplicativos, você também pode desativar a multitarefa, incluindo desabilitar a reprodução de vídeo PIP.

Este artigo abordará as etapas necessárias para garantir que seu aplicativo Xamarin.iOS seja executado corretamente em um ambiente multitarefa ou como desativar a multitarefa se não for uma boa opção para seu aplicativo.

Multitarefa para vídeo iPad

Guia de início rápido multitarefa

Para oferecer suporte ao Modo de Exibição Slide Over ou Dividido , seu aplicativo deve fazer o seguinte:

  • Ser construído contra o iOS 9 (ou superior).
  • Use um Storyboard para sua tela de inicialização (e não ativos de imagem).
  • Use um Storyboard com Autolayout e Classes de Tamanho para sua interface do usuário.
  • Suporta todas as 4 orientações de dispositivos iOS (Retrato, Retrato de cabeça para baixo, Paisagem à esquerda e Paisagem à direita).

Sobre a multitarefa para iPad

O iOS 9 oferece novas habilidades multitarefa no iPad com a introdução do Slide Over, Split View (apenas iPad Air 2, iPad Mini 4 e iPad Pro) e Picture in Picture. Examinaremos mais de perto esses recursos nas seções a seguir.

Deslize sobre

O recurso Slide Over permite que o usuário escolha um segundo aplicativo e o exiba em um pequeno painel deslizante para fornecer interação rápida. O painel Deslizar sobre é temporário e será fechado quando o usuário voltar a trabalhar com o aplicativo principal novamente.

O painel Slide Over

A principal coisa a lembrar é que o usuário decide quais dois aplicativos serão executados lado a lado e que o desenvolvedor não tem controle sobre esse processo. Como resultado, há algumas coisas que você precisará fazer para garantir que seu aplicativo Xamarin.iOS seja executado corretamente em um painel Slide Over:

  • Usar Autolayout e classes de tamanho — Como seu aplicativo Xamarin.iOS agora pode ser executado no painel lateral deslizante, você não pode mais confiar no dispositivo, no tamanho da tela ou na orientação para criar o layout da interface do usuário. Para garantir que seu aplicativo dimensione sua interface corretamente, você precisará usar Autolayout e Classes de Tamanho. Para obter mais informações, consulte nossa documentação de Introdução aos Storyboards Unificados .
  • Usar recursos com eficiência — Como seu aplicativo agora pode compartilhar o sistema com outro aplicativo em execução, é fundamental que ele use os recursos do sistema de forma eficiente. Quando a memória se torna escassa, o sistema encerra automaticamente o aplicativo que está consumindo mais memória. Consulte o Guia de Eficiência Energética da Apple para Aplicativos iOS para obter mais detalhes.

O Slide Over está disponível apenas num iPad Pro, iPad Air, iPad Air 2, iPad Mini 2, iPad Mini 3 ou iPad Mini 4. Para saber mais sobre como preparar seu aplicativo para o Slide Over, consulte a documentação da Apple Adotando aprimoramentos multitarefa no iPad .

Modo Divisão

No hardware compatível do iPad (apenas iPad Air 2, iPad Mini 4 e iPad Pro), o usuário pode escolher um segundo aplicativo e executá-lo lado a lado com o aplicativo em execução no momento em um modo de tela dividida. O usuário pode controlar a porcentagem da tela principal que cada aplicativo ocupa arrastando um divisor na tela.

A visão dividida

Como o Slide Over, o usuário decide quais dois aplicativos serão executados lado a lado e, novamente, o desenvolvedor não tem controle sobre esse processo. Como resultado, o Split View coloca requisitos semelhantes em um aplicativo Xamarin.iOS:

  • Usar Autolayout e classes de tamanho — Como seu aplicativo Xamarin.iOS agora pode ser executado em um modo de tela dividida no tamanho especificado pelo usuário, você não pode mais confiar no dispositivo, no tamanho da tela ou na orientação para criar o layout da interface do usuário. Para garantir que seu aplicativo dimensione sua interface corretamente, você precisará usar Autolayout e Classes de Tamanho. Para obter mais informações, consulte nossa documentação de Introdução aos Storyboards Unificados .
  • Usar recursos com eficiência — Como seu aplicativo agora pode compartilhar o sistema com outro aplicativo em execução, é fundamental que ele use os recursos do sistema de forma eficiente. Quando a memória se torna escassa, o sistema encerra automaticamente o aplicativo que está consumindo mais memória. Consulte o Guia de Eficiência Energética da Apple para Aplicativos iOS para obter mais detalhes.

Para saber mais sobre como preparar seu aplicativo para o Split View, consulte a documentação da Apple Adotando aprimoramentos multitarefa no iPad .

Imagem em Imagem

O novo recurso Picture in Picture (também conhecido como PIP) permite que o usuário assista a um vídeo em uma pequena janela flutuante que o usuário pode posicionar em qualquer lugar na tela acima de outros aplicativos em execução.

Um exemplo de imagem na janela flutuante Imagem na imagem

Assim como no Slide Over e no Split View, o usuário tem controle total sobre a visualização de um vídeo no modo Imagem em Imagem. Se a função principal do seu aplicativo for assistir a vídeos, ele precisará de algumas modificações para se comportar corretamente no modo PIP. Caso contrário, nenhuma alteração será necessária para oferecer suporte ao PIP.

Para que seu aplicativo exiba vídeo PIP a pedido do usuário, você precisará usar o AVKit ou as APIs do AV Foundation. A estrutura do Media Player foi depreciada no iOS 9 e não suporta PIP.

O Picture in Picture está disponível apenas num iPad Pro, iPad Air, iPad Air 2, iPad Mini 2, iPad Mini 3 ou iPad Mini 4. Para obter mais informações, consulte a documentação de Início Rápido do Picture in Picture da Apple.

Suporte a multitarefa em seu aplicativo

Para qualquer aplicativo Xamarin.iOS existente, o suporte a multitarefa é uma tarefa transparente, desde que seu aplicativo já siga os guias de design e as práticas recomendadas da Apple para iOS 8. Isso significa que o aplicativo deve usar storyboards com Autolayout e Classes de Tamanho para seus layouts de Interface do Usuário (consulte nossa Introdução aos Storyboards Unificados para obter mais informações).

Para esses aplicativos, pouca ou nenhuma mudança é necessária para suportar multitarefa e se comportar bem dentro dela. Se a interface do usuário do seu aplicativo foi criada usando outros métodos, como posicionar e dimensionar diretamente elementos da interface do usuário no código C# ou se depender de tamanhos ou orientações de tela de dispositivos específicos, ela precisará de modificações significativas para oferecer suporte correto à multitarefa do iOS 9.

Para oferecer suporte à multitarefa do iOS 9 em qualquer novo aplicativo Xamarin.iOS, use novamente storyboards com Autolayout e Classes de Tamanho para todos os layouts da Interface do Usuário do aplicativo e implemente as instruções nas seções a seguir.

Considerações sobre tamanho e orientação da tela

Antes do iOS 9, você podia projetar seu aplicativo em relação a tamanhos e orientações de tela de dispositivos específicos. Como um aplicativo agora pode ser executado em um painel Slide Out ou no modo Split View, ele pode ser executado em uma classe de tamanho horizontal compacta ou regular no iPad, independentemente da orientação física ou do tamanho da tela do dispositivo.

Considerações sobre tamanho e orientação da tela

Em um iPad, um aplicativo de tela inteira tem Classes de tamanho horizontais e verticais regulares. Todos os iPhones, exceto o iPhone 6 Plus e iPhone 6s Plus, têm classes de tamanho compacto em ambas as direções em qualquer orientação. O iPhone 6 Plus e o iPhone 6s Plus no modo paisagem têm uma classe de tamanho horizontal regular e uma classe de tamanho vertical compacta (muito parecido com um iPad Mini).

Em iPads compatíveis com Slide Over e Split View, você pode acabar com as seguintes combinações:

Orientação Aplicativo principal Aplicativo secundário
Retrato 75% da tela
Horizontal Compacto
Regular Vertical
25% da tela
Horizontal Compacto
Regular Vertical
Paisagem 75% da tela
Regular Horizontal
Regular Vertical
25% da tela
Horizontal Compacto
Regular Vertical
Paisagem 50% da tela
Horizontal Compacto
Regular Vertical
50% da tela
Horizontal Compacto
Regular Vertical

No aplicativo de exemplo, se ele for executado em tela cheia em um iPad no modo paisagem, ele apresentará a lista e a exibição de detalhes ao mesmo tempo:

A lista e a vista de detalhe apresentadas ao mesmo tempo

Se o mesmo aplicativo for executado em um painel Slide Over, ele será disposto como uma classe de tamanho horizontal compacta e exibirá apenas a lista:

Somente a lista apresentada quando o dispositivo é horizontal

Para garantir que seu aplicativo se comporte corretamente nessas situações, você deve adotar Coleções de Trait junto com Classes de Tamanho e estar em conformidade com as IUIContentContainer interfaces e IUITraitEnvironment . Consulte a Referência de classe UITraitCollection da Apple e nosso guia Introdução aos storyboards unificados para obter mais informações.

Além disso, você não pode mais confiar nos limites de tela dos dispositivos para definir a área visível do aplicativo, você precisará usar os limites de janela do aplicativo. Como os limites da janela estão totalmente sob o controle do usuário, você não pode ajustá-los programaticamente ou impedir que o usuário altere esses limites.

Por fim, seu aplicativo deve usar um arquivo de storyboard para apresentar sua Tela de Inicialização, em vez de usar um conjunto de arquivos de imagem .png e oferecer suporte a todas as quatro orientações de interface (Retrato, Retrato de cabeça para baixo, Paisagem à esquerda e Paisagem à direita) a serem consideradas para execução em um painel Slide Over ou no modo de Exibição dividida.

Atalhos de teclado de hardware personalizados

No iOS 9 rodando em um iPad, a Apple estendeu o suporte para teclados de hardware. Os iPads sempre incluíram suporte básico a teclados externos via Bluetooth e alguns fabricantes de teclados criaram teclados que incluíam teclas específicas do iOS com fio.

Agora, com o iOS 9, os aplicativos podem criar seus próprios atalhos de teclado personalizados. Além disso, alguns atalhos de teclado básicos estão disponíveis, como Command-C (copiar), Command-X (cortar), Command-V (colar) e Command-Shift-H (home), sem que um aplicativo seja escrito especificamente para respondê-los.

O Command-Tab exibirá um alternador de aplicativos que permite ao usuário alternar rapidamente entre aplicativos a partir do teclado, assim como o Mac OS:

O alternador de aplicativos

Se um aplicativo iOS 9 incluir atalhos de teclado, o usuário poderá manter pressionadas as teclas Comando, Opção ou Controle para exibi-las em um pop-up:

A captura de tela mostra os atalhos de teclado de um aplicativo.

Definindo atalhos de teclado personalizados

Se adicionarmos o seguinte código a um View ou View Controller em nosso aplicativo, quando esse modo de exibição ou controlador estiver visível, um atalho de teclado personalizado estará disponível:

#region Custom Keyboard Shortcut
public override bool CanBecomeFirstResponder {
    get { return true; }
}

public override UIKeyCommand[] KeyCommands {
    get {

        var keyCommand = UIKeyCommand.Create (new NSString("n"), UIKeyModifierFlags.Command, new Selector ("NewEntry"), new NSString("New Entry"));
        return new UIKeyCommand[]{ keyCommand };
    }
}

[Export("NewEntry")]
public void NewEntry() {

    // Add a new entry
    ...

}
#endregion

Primeiro, substituímos a CanBecomeFirstResponder propriedade e retornamos true para que o View ou View Controller possa receber entrada de teclado.

Em seguida, substituímos a KeyCommands propriedade e criamos um novo UIKeyCommand para o pressionamento de tecla Command-N . Quando o pressionamento de tecla é ativado, chamamos o NewEntry método (que expomos ao iOS 9 usando o Export comando) para executar a ação solicitada.

Se executarmos este aplicativo em um iPad com um teclado de hardware conectado e o usuário digitar Command-N, uma nova entrada será adicionada à lista. Se o usuário mantiver pressionada a tecla Comando , a lista de atalhos será exibida:

A captura de tela mostra o atalho Nova Entrada de um aplicativo.

Considerações sobre gerenciamento de recursos

Mesmo para aplicativos que já estão usando os guias de design e as práticas recomendadas do iOS 8, o gerenciamento eficiente de recursos ainda pode ser um problema. No iOS 9, os aplicativos não têm mais uso exclusivo de memória, CPU ou outros recursos do sistema.

Como resultado, você deve ajustar seu aplicativo Xamarin.iOS para usar os recursos do sistema de forma eficaz ou ele enfrenta terminação em situações de pouca memória. Isso é igualmente verdadeiro para aplicativos que optam por não participar de multitarefas, já que um segundo aplicativo ainda pode ser executado em um painel Slide Over ou em uma janela Imagem em Imagem que exija recursos extras ou faça com que a taxa de atualização fique abaixo de 60 quadros por segundo.

Considere as seguintes ações do usuário e suas implicações:

  • Inserindo texto em um painel Slide Over - Mesmo que seu aplicativo não tenha entrada de texto, o teclado do sistema agora pode ser exibido em sua interface do usuário. Como resultado, o aplicativo pode precisar responder a notificações de exibição do teclado (como mostrar e ocultar o teclado).
  • Executando um segundo aplicativo em um painel Slide Over - O novo aplicativo agora está sendo executado em primeiro plano e competindo com o aplicativo existente por recursos do sistema, como ciclos de memória e CPU.
  • Reproduzir um vídeo em uma janela PIP - Não só essa janela pode cobrir parte da interface do seu aplicativo, mas o aplicativo que iniciou o vídeo ainda está sendo executado em segundo plano e consumindo recursos de CPU e memória.

Para garantir que seu aplicativo esteja usando os recursos de forma eficiente, você deve fazer o seguinte:

  • Crie o perfil do aplicativo com instrumentos - Verifique se há vazamentos de memória, uso ostensivo da CPU e áreas onde o aplicativo pode estar bloqueando o thread principal.
  • Responder a métodos de transições de estado - Em seu AppDelegate.cs substituição de arquivo e resposta a métodos de alteração de estado, como o aplicativo entrando ou retornando do plano de fundo. Libere quaisquer ativos não necessários, como imagens, dados ou visualizações e visualize o controlador.
  • Teste lado a lado com aplicativos com uso intensivo de memória - Execute seu aplicativo usando o Slide Out e o Split View em hardware físico do iOS com um aplicativo com uso intensivo de memória, como o Google Maps (no modo de exibição Satélite) e teste se ambos os aplicativos permanecem responsivos e não falham.

Consulte o Guia de Eficiência Energética da Apple para Aplicativos iOS para obter mais informações sobre o gerenciamento de recursos.

Optar por não participar da multitarefa

Embora a Apple sugira que todos os aplicativos do iOS 9 suportam multitarefa, pode haver razões muito específicas para um aplicativo não também, como jogos ou aplicativos de câmera que exigem a tela inteira para funcionar corretamente.

Para que seu aplicativo Xamarin.iOS opte por não ser executado em um painel Slide Out ou no modo Split View, edite o arquivo Info.plist do projeto e marque Requer tela cheia:

Optar por não participar da multitarefa

Importante

Embora a opção por não participar da multitarefa impeça que seu aplicativo seja executado no Modo de Exibição Deslizado ou no Modo de Exibição Dividido, ele não impede que outro aplicativo seja executado em Slide Out ou que um vídeo Imagem em Imagem seja exibido junto com o aplicativo.

Desativando a reprodução de vídeo PIP

Na maioria das situações, seu aplicativo deve permitir que o usuário reproduza qualquer conteúdo de vídeo exibido em uma janela flutuante Imagem em Imagem. No entanto, pode haver situações em que isso pode não ser desejado, como vídeos de cenas cortadas do jogo.

Para desativar a reprodução de vídeo PIP, faça o seguinte em seu aplicativo:

  • Se você estiver usando um para exibir vídeo AVPlayerViewController , defina a AllowsPictureInPicturePlayback propriedade como false.
  • Se você estiver usando o AVPlayerLayer para exibir vídeo, não instancie um AVPictureInPictureControllerarquivo .
  • Se você estiver usando um para exibir vídeo WKWebView , defina a AllowsPictureInPictureMediaPlayback propriedade como false.

Resumo

Este artigo abordou as etapas necessárias para garantir que um aplicativo Xamarin.iOS seja executado e se comporte corretamente na nova capacidade multitarefa do iOS 9 para iPads. Além disso, cobriu a exclusão de multitarefa para aplicativos onde não é uma boa opção.