Siri Remote e Bluetooth Controllers para tvOS no Xamarin
Os usuários do seu aplicativo Xamarin.tvOS não interagirão com sua interface diretamente, como no iOS, onde tocam em imagens na tela do dispositivo, mas indiretamente do outro lado da sala usando o Siri Remote.
Se o seu aplicativo for um jogo, você também poderá criar suporte para controladores de jogo Bluetooth Made For iOS (MFI) 3rd party em seu aplicativo.
Este artigo descreve os botões Siri Remote, Touch Surface Gestures e Siri Remote e mostra como trabalhar com eles por meio de gestos e storyboards, gestos e código e manipulação de eventos de baixo nível. Finalmente, ele discute Trabalhando com controladores de jogo em um aplicativo Xamarin.tvOS.
O controle remoto Siri
A principal maneira que os usuários estarão interagindo com a Apple TV, e seu aplicativo Xamarin.tvOS, é através do Siri Remote incluído. A Apple projetou o controle remoto para diminuir a distância entre o usuário sentado no sofá e a interface do usuário da Apple TV exibida em toda a sala na tela da TV.
Seu desafio como desenvolvedor de aplicativos tvOS é criar uma interface de usuário rápida, fácil de usar e visualmente atraente que aproveita a superfície de toque, o acelerômetro, o giroscópio e os botões do Siri Remote.
O Siri Remote tem os seguintes recursos e usos esperados em seu aplicativo tvOS:
Recurso | Uso geral do aplicativo | Uso do aplicativo de jogo |
---|---|---|
Superfície tátil Passe o dedo para navegar, pressione para selecionar e segure para menus contextuais. |
Toque/Deslize Navegação da interface do usuário entre itens focalizáveis. Clicar Ativa o item selecionado (em foco). |
Toque/Deslize Depende do design do jogo e pode ser usado como um D-Pad tocando nas bordas. Clicar Execute a função de botão principal. |
Menu Pressione para retornar à tela ou menu anterior. |
Retorna à tela anterior e sai para a tela inicial da Apple TV na tela principal do aplicativo. | Pause e retome a jogabilidade, retorne à tela anterior e saia para a tela inicial da Apple TV na tela principal do aplicativo. |
Siri/Pesquisa Em países com Siri, pressione e segure para o controle de voz, em todos os outros países, exibe a tela de pesquisa. |
N/D | N/D |
Reproduzir/Pausar Reproduzir e pausar mídia ou fornece uma função secundária em aplicativos. |
Inicia a reprodução de mídia e pausa/retoma a reprodução. | Executa a função de botão secundário ou ignora o vídeo de introdução (se existir). |
Início Pressione para retornar à tela inicial, clique duas vezes para exibir aplicativos em execução, pressione e segure o dispositivo de suspensão. |
N/D | N/D |
Volume Controla o volume do equipamento de áudio/vídeo anexado. |
N/D | N/D |
Gestos de toque no Surface
O Touch Surface do Siri Remote é capaz de detectar uma variedade de gestos com um único dedo que você pode responder em seu aplicativo Xamarin.tvOS:
Passar o dedo | Clique | Toque |
---|---|---|
Move a seleção (foco) entre os elementos da interface do usuário na tela (para cima, para baixo, para a esquerda, para a direita). O gesto de percorrer pode ser usado para percorrer grandes listas de conteúdo rapidamente usando a inércia. | Ativa o item selecionado (em foco) ou age como o botão principal em um jogo. Clicar e segurar pode ativar menus contextuais ou funções secundárias. | Tocar levemente na superfície de toque nas bordas funciona como botões direcionais em um D-Pad, movendo o foco para cima, para baixo, para a esquerda ou para a direita, dependendo da área tocada. Dependendo do aplicativo, pode ser usado para revelar controles ocultos. |
A Apple fornece as seguintes sugestões para trabalhar com gestos do Touch Surface:
- Diferenciar entre Cliques e Toques - Clicar é uma ação intencional do usuário e é bem adequado para seleção, ativação e o botão principal de um jogo. O toque é mais sutil e deve ser usado com moderação porque o usuário geralmente está segurando o Siri Remote na mão e pode ativar acidentalmente um evento Tap facilmente.
- Não redefinir gestos padrão - O usuário tem uma expectativa de que gestos específicos executarão ações específicas, você não deve redefinir o significado ou a função desses gestos em seu aplicativo. A única exceção é um aplicativo de jogo durante o jogo ativo.
- Definir novos gestos com moderação - Novamente, o usuário tem uma expectativa de que gestos específicos executarão ações específicas. Você deve evitar definir gestos personalizados para executar ações padrão. E, novamente, os jogos são a exceção mais comum, onde gestos personalizados podem adicionar diversão e imersão ao jogo.
- Se apropriado, Responder a toques do D-Pad - Tocar levemente nas bordas dos cantos do Touch Surface reagirá como um D-Pad em um controle de jogo movendo o foco ou a direção para cima, para baixo, para a esquerda ou para a direita. Se apropriado, você deve responder a esses gestos em seu aplicativo ou jogo.
Botões do Siri Remote
Além dos gestos no Touch Surface, a sua aplicação pode responder ao utilizador a clicar no Touch Surface ou a premir o botão Reproduzir/Pausar. Se você estiver acessando o Siri Remote usando o Game Controller Framework, também poderá detectar o botão Menu sendo pressionado.
Além disso, os pressionamentos de botão de menu podem ser detectados usando um Reconhecedor de Gestos com elementos padrão UIKit
. Se você interceptar o botão Menu que está sendo pressionado, você será responsável por fechar o View and View Controller atual e retornar ao anterior.
Importante
Você deve sempre atribuir uma função ao botão Reproduzir/Pausar no controle remoto. Ter um botão não funcional pode fazer com que seu aplicativo pareça quebrado para o usuário final. Se não tiver uma função válida para este botão, atribua a mesma função que o botão principal (toque em Clique no Surface).
Gestos e Storyboards
A maneira mais fácil de trabalhar com o Siri Remote em seu aplicativo Xamarin.tvOS é adicionar Reconhecedores de Gestos às suas exibições no Designer de Interface.
Para adicionar um Reconhecedor de Gestos, faça o seguinte:
No Gerenciador de Soluções, clique duas vezes no arquivo e abra-o
Main.storyboard
para editar o Designer de Interface.Arraste um Reconhecedor de gestos de toque da Biblioteca e solte-o na Exibição:
Marque Selecionar na seção Botão do Inspetor de Atributos:
Selecionar significa que o gesto responderá ao usuário clicando no Touch Surface no Siri Remote. Você também tem a opção de responder aos botões Menu, Play/Pause, Up, Down, Left e Right .
Em seguida, conecte uma Ação do Reconhecedor de gestos de toque e chame-a:
TouchSurfaceClicked
Salve suas alterações e retorne ao Visual Studio para Mac.
Edite o arquivo View Controller (exemplo FirstViewController.cs
) e adicione o seguinte código para manipular o gesto que está sendo disparado:
using System;
using UIKit;
namespace tvRemote
{
public partial class FirstViewController : UIViewController
{
...
#region Custom Actions
partial void TouchSurfaceClicked (Foundation.NSObject sender) {
// Handle click here
...
}
#endregion
}
}
Para obter mais informações sobre como trabalhar com Storyboards, consulte nosso Guia de Início Rápido Olá, tvOS. Especificamente as seções Criando a interface do usuário e Escrevendo o código com saídas e ações .
Gestos e Código
Opcionalmente, você pode criar gestos diretamente no código C# e adicioná-los a exibições em sua interface do usuário. Por exemplo, para adicionar uma série de Reconhecedores de gestos de passar o dedo, edite o controlador de exibição e adicione o seguinte código:
using System;
using UIKit;
namespace tvRemote
{
public partial class SecondViewController : UIViewController
{
#region Constructors
public SecondViewController (IntPtr handle) : base (handle)
{
}
#endregion
#region Override Methods
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
// Wire-up gestures
var upGesture = new UISwipeGestureRecognizer (() => {
RemoteView.ArrowPressed = "Up";
ButtonLabel.Text = "Swiped Up";
}) {
Direction = UISwipeGestureRecognizerDirection.Up
};
this.View.AddGestureRecognizer (upGesture);
var downGesture = new UISwipeGestureRecognizer (() => {
RemoteView.ArrowPressed = "Down";
ButtonLabel.Text = "Swiped Down";
}) {
Direction = UISwipeGestureRecognizerDirection.Down
};
this.View.AddGestureRecognizer (downGesture);
var leftGesture = new UISwipeGestureRecognizer (() => {
RemoteView.ArrowPressed = "Left";
ButtonLabel.Text = "Swiped Left";
}) {
Direction = UISwipeGestureRecognizerDirection.Left
};
this.View.AddGestureRecognizer (leftGesture);
var rightGesture = new UISwipeGestureRecognizer (() => {
RemoteView.ArrowPressed = "Right";
ButtonLabel.Text = "Swiped Right";
}) {
Direction = UISwipeGestureRecognizerDirection.Right
};
this.View.AddGestureRecognizer (rightGesture);
}
#endregion
}
}
Tratamento de eventos de baixo nível
Se você estiver criando um tipo personalizado com base em UIKit
seu aplicativo Xamarin.tvOS (por exemplo UIView
), você também tem a capacidade de fornecer manipulação de baixo nível de pressionamento de botão por meio UIPress
de eventos.
Um UIPress
evento é para tvOS o que um UITouch
evento é para iOS, exceto UIPress
retorna informações sobre pressionamentos de botão no Siri Remote ou em outros dispositivos Bluetooth conectados (como um Game Controller). UIPress
eventos descrevem o botão que está sendo pressionado e seu estado (Iniciado, Cancelado, Alterado ou Encerrado).
Para botões analógicos em dispositivos como Bluetooth Game Controllers, UIPress
também retorna a quantidade de força que está sendo aplicada ao botão. A Type
propriedade do UIPress
evento define qual botão físico alterou o estado, enquanto o restante das propriedades descreve a alteração que ocorreu.
O código a seguir mostra um exemplo de manipulação de eventos de baixo nível UIPress
para um UIView
:
using System;
using Foundation;
using UIKit;
namespace tvRemote
{
public partial class EventView : UIView
{
#region Computed Properties
public override bool CanBecomeFocused {
get {
return true;
}
}
#endregion
#region
public EventView (IntPtr handle) : base (handle)
{
}
#endregion
#region Override Methods
public override void PressesBegan (NSSet<UIPress> presses, UIPressesEvent evt)
{
base.PressesBegan (presses, evt);
foreach (UIPress press in presses) {
// Was the Touch Surface clicked?
if (press.Type == UIPressType.Select) {
BackgroundColor = UIColor.Red;
}
}
}
public override void PressesCancelled (NSSet<UIPress> presses, UIPressesEvent evt)
{
base.PressesCancelled (presses, evt);
foreach (UIPress press in presses) {
// Was the Touch Surface clicked?
if (press.Type == UIPressType.Select) {
BackgroundColor = UIColor.Clear;
}
}
}
public override void PressesChanged (NSSet<UIPress> presses, UIPressesEvent evt)
{
base.PressesChanged (presses, evt);
}
public override void PressesEnded (NSSet<UIPress> presses, UIPressesEvent evt)
{
base.PressesEnded (presses, evt);
foreach (UIPress press in presses) {
// Was the Touch Surface clicked?
if (press.Type == UIPressType.Select) {
BackgroundColor = UIColor.Clear;
}
}
}
#endregion
}
}
Assim como acontece com UITouch
os eventos, se você precisar implementar qualquer uma das substituições de UIPress
evento, deverá implementar todas as quatro.
Controladores de jogo Bluetooth
Além do Siri Remote padrão que acompanha a Apple TV, os controladores de jogos Bluetooth Made For iOS (MFI) podem ser emparelhados com a Apple TV e usados para controlar o aplicativo Xamarin.tvOS.
Os Controladores de Jogo podem ser usados para melhorar a jogabilidade e proporcionar uma sensação de imersão em um jogo. Eles também podem ser usados para controlar a interface padrão da Apple TV para que o uso não precise alternar entre o controle remoto e o controle.
Importante
Os Controladores de Jogos Bluetooth são uma compra opcional que os usuários finais podem fazer, seu aplicativo não pode forçar o usuário a comprar um. Se o seu aplicativo for compatível com Controladores de Jogo, ele também deverá suportar o Siri Remote para que o jogo possa ser usado por todos os usuários da Apple TV.
Um Controlador de Jogo tem os seguintes recursos e usos esperados em seu aplicativo tvOS:
Recurso | Uso geral do aplicativo | Uso do aplicativo de jogo |
---|---|---|
D-Almofada | Navega pelos elementos da interface do usuário (altera o foco). | Depende do jogo. |
A | Ativa o item selecionado (em foco). | Executa a função de botão principal e confirma as ações da caixa de diálogo. |
B | Retorna à tela anterior ou sai para a tela inicial se estiver na tela principal do aplicativo. | Executa a função de botão secundário ou retorna à tela anterior. |
X | Inicia a reprodução de mídia ou pausa/retoma a reprodução. | Depende do jogo. |
Y | N/D | Depende do jogo. |
Menu | Retorna à tela anterior ou sai para a tela inicial se estiver na tela principal do aplicativo. | Pausar/retomar a jogabilidade, retornar à tela anterior ou sair para a tela inicial se estiver na tela principal do aplicativo. |
Botão do ombro esquerdo | Navega para a esquerda. | Depende do jogo. |
Gatilho esquerdo | Navega para a esquerda. | Depende do jogo. |
Botão do ombro direito | Navega à direita. | Depende do jogo. |
Gatilho direito | Navega à direita | Depende do jogo. |
Polegar esquerdo | Navega pelos elementos da interface do usuário (altera o foco). | Depende do jogo. |
Polegar direito | N/D | Depende do jogo. |
A Apple fornece as seguintes sugestões para trabalhar com controladores de jogos:
- Confirme as conexões do Game Controller - Seu aplicativo tvOS pode ser iniciado e interrompido a qualquer momento pelo usuário final. Você deve sempre verificar a presença de um Controlador de Jogo nos horários de início ou vigília do aplicativo e tomar as medidas necessárias.
- Certifique-se de que seu aplicativo funcione no Siri Remote e nos Controladores de Jogo - Não exija que os usuários alternem entre o Siri Remote e um Game Controller para usar seu aplicativo. Teste seu aplicativo com frequência com ambos os tipos de controladores, garantindo que tudo seja fácil de navegar e funcione conforme o esperado.
- Fornecer um caminho de volta - Pressionar o botão Menu deve sempre retornar à tela anterior. Se o usuário estiver na tela principal do aplicativo, o botão Menu deve retorná-lo à tela inicial da Apple TV. Durante o jogo, o botão Menu deve exibir um alerta dando ao usuário a capacidade de pausar/retomar a jogabilidade ou retornar ao menu principal.
Trabalhando com controladores de jogos
Como dito acima, além do Siri Remote padrão que acompanha a Apple TV, o usuário pode opcionalmente anexar um 3rd party, Made For iOS (MFI) Bluetooth Game Controllers e usá-lo para controlar seu aplicativo Xamarin.tvOS.
Se o seu aplicativo exigiu entrada de controlador de baixo nível, você pode usar o Game Controller Framework da Apple, que tem as seguintes modificações para tvOS:
- O perfil do Micro Game Controller (
GCMicroGamepad
) foi adicionado para direcionar o Siri Remote. - A nova
GCEventViewController
classe pode ser usada para rotear eventos do controlador de jogo por meio de seu aplicativo. Consulte a seção Determinando a entrada do controlador de jogo abaixo para obter mais detalhes.
Requisitos de suporte do controlador de jogo
A Apple tem vários requisitos específicos que devem ser atendidos se o aplicativo Xamarin.tvOS for compatível com Controladores de Jogos:
- Você deve suportar o Siri Remote - Você deve sempre suportar o Siri Remote. Seu jogo não pode exigir um Controlador de Jogo 3rd party para ser jogável.
- Você deve oferecer suporte ao layout de controle estendido - Todos os controladores de jogo do tvOS são controladores estendidos não conformes.
- Os jogos devem ser jogáveis com controles autônomos - Se seu aplicativo oferecer suporte a um Controlador de Jogo Estendido, ele deverá ser jogável somente com esse Controlador de Jogo.
- Você deve suportar o botão Reproduzir/Pausar - Durante o jogo, se o usuário pressionar o botão Reproduzir/Pausar, você deve exibir um alerta dando ao usuário a capacidade de pausar/retomar a jogabilidade ou retornar ao menu principal.
Ativando o suporte ao controlador de jogo
Para habilitar o suporte ao Game Controller em seu aplicativo Xamarin.tvOS, clique duas vezes no Info.plist
arquivo no Gerenciador de Soluções para abri-lo para edição:
Na seção Controlador de Jogo, marque Ativar Controladores de Jogo e verifique todos os tipos de Controlador de Jogo que serão suportados pelo aplicativo.
Usando o Siri Remote como um controlador de jogo
O Siri Remote que vem com a Apple TV pode ser usado como um controlador de jogo limitado. Como outros Controladores de Jogo, ele aparece no Game Controller Framework como um GCController
objeto e suporta os GCMotion
perfis e os GCMicroGamepad
perfis.
O Siri Remote tem as seguintes características ao ser usado como um controlador de jogo:
- O Touch Surface pode ser usado como um D-pad que fornece dados de entrada analógica.
- O controle remoto pode ser usado em uma orientação retrato ou paisagem e seu aplicativo decide se o objeto de perfil deve inverter os dados de entrada automaticamente.
- Clicar no Touch Surface é como premir o botão A num Comando de Jogo.
- O botão Reproduzir/Pausar funciona como o botão X em um Controlador de Jogo.
- O botão Menu deve exibir um alerta dando ao usuário a capacidade de pausar/retomar a jogabilidade ou retornar ao menu principal.
Determinando a entrada do controlador de jogo
Ao contrário do iOS, onde os eventos do Game Controller podem ser recebidos em paralelo com os eventos Touch, o tvOS processa todos os eventos de baixo nível para entregar eventos de alto nível UIKit
. Como resultado, se você precisar acessar os eventos do Game Controller de baixo nível, precisará desativar UIKit
o comportamento padrão do .
No tvOS, quando você deseja processar a entrada do Game Controller diretamente, você precisa usar uma GCEventViewController
(ou uma subclasse) para exibir a Interface do Usuário do jogo. Sempre que um for o Primeiro Respondente, a entrada do Controlador de GCEventViewController
Jogo será capturada e entregue ao seu aplicativo por meio da Estrutura do Controlador de Jogo.
Você pode usar a UserInteractionEnabled
propriedade da classe para alternar como os GCEventViewController
eventos são processados e manipulados.
Para obter informações sobre como implementar o suporte ao Game Controller, consulte a seção Trabalhando com controladores de jogo da Apple no Guia de programação de aplicativos para tvOS e Guia de programação de controladores de jogos.
Resumo
Este artigo abordou o novo Siri Remote que acompanha os botões Apple TV, Touch Surface e Siri Remote. Em seguida, abordou o trabalho com gestos e Storyboards, gestos e código e eventos de baixo nível. Finalmente, se discutido o trabalho com controladores de jogo.