Share via


Controladores de Bluetooth y Siri Remote para tvOS en Xamarin

Los usuarios de la aplicación Xamarin.tvOS no interactuarán directamente con la interfaz como con iOS, donde pulsan imágenes en la pantalla del dispositivo, sino que lo harán indirectamente desde el otro lado de la sala mediante el Siri Remote.

Si su aplicación es un juego, puede incorporar opcionalmente en ella compatibilidad con Controladores de juego Bluetooth Made For iOS (MFI) de terceros.

El mando a distancia y el dispositivo de juego bluetooth

En este artículo se describen los Siri Remote, Gestos de superficie táctil y Botones remotos de Siri y se muestra cómo trabajar con ellos a través de Gestos y guiones gráficos, Gestos y código y Control de eventos de bajo nivel. Por último, se analiza cómo Trabajar con controladores de juego en una aplicación de Xamarin.tvOS.

El mando Siri Remote

La forma principal de que los usuarios interactuarán con Apple TV y la aplicación Xamarin.tvOS es a través del Siri Remote incluido. Apple diseñó el controlador remoto para reducir la distancia entre el usuario sentado en el sofá y la interfaz de usuario de Apple TV mostrada al otro lado de la habitación en la pantalla del televisor.

Su desafío como desarrollador de aplicaciones tvOS es crear una interfaz de usuario rápida, fácil de usar y visualmente atractiva que aprovecha la superficie táctil, acelerómetro, giroscopio y botones del Siri Remote.

El mando Siri Remote

El Siri Remote tiene las siguientes características y usos esperados dentro de la aplicación tvOS:

Característica Uso general de aplicaciones Uso de aplicaciones de juego
Superficie táctil
Deslice el dedo para navegar, presione para seleccionar y mantenga presionado para los menús contextuales.
Pulsar/Deslizar
Navegación de la interfaz de usuario entre elementos enfocados.

Hacer clic
Activa el elemento seleccionado (en el foco).
Pulsar/Deslizar
Depende del diseño del juego y se puede usar como una cruceta virtual pulsando en los bordes.

Hacer clic
Ejecute la función de botón principal.
Menu
Presione para volver a la pantalla o menú anterior.
Vuelve a la pantalla anterior y abandona la pantalla de inicio del Apple TV desde la pantalla principal de la aplicación. Pausar y reanudar el juego, vuelve a la pantalla anterior y abandona la pantalla de inicio del Apple TV desde la pantalla principal de la aplicación.
Siri/Búsqueda
En países con Siri, mantiene presionado el control de voz. En todos los demás países, muestra la pantalla de búsqueda.
N/D N/D
Reproducir/Pausa
Reproduce y pausa medios o proporciona una función secundaria en las aplicaciones.
Inicia la reproducción multimedia y pausa o reanuda la reproducción. Realiza la función de botón secundario u omite el vídeo de introducción (si existe).
Inicio
Presionar para volver a la pantalla Inicio, hacer doble clic para mostrar las aplicaciones en ejecución, mantener presionado para poner el dispositivo en suspensión.
N/D N/D
Volumen
Controla el volumen de equipos de audio y vídeo conectados.
N/D N/D

Gestos de superficie tácil

La superficie táctil del Siri Remote es capaz de detectar una variedad de gestos de un solo dedo a los que puede responder en su aplicación Xamarin.tvOS:

Deslizar rápidamente Haga clic Pulsar
Mueve la selección Activa el elemento seleccionado Botones direccionales
Mueve la selección (foco) entre los elementos de la interfaz de usuario en la pantalla (arriba, abajo, a la izquierda, a la derecha). El deslizamiento se puede usar para desplazarse por listas grandes de contenido rápidamente mediante la inercia. Activa el elemento seleccionado (en foco) o actúa como el botón principal de un juego. Hacer clic y mantener pulsado puede activar menús contextuales o funciones secundarias. Pulsar ligeramente la superficie táctil en los bordes actúa como botones direccionales en una cruceta virtual, moviendo el foco hacia arriba, hacia abajo, hacia la izquierda o hacia la derecha en función del área pulsada. Dependiendo de la aplicación, se puede usar para mostrar controles ocultos.

Apple proporciona las siguientes sugerencias para trabajar con gestos de superficie táctil:

  • Diferenciar entre clics y pulsaciones: hacer clic es una acción intencionada por parte del usuario y es adecuada para la selección, activación y el botón principal de un juego. La pulsación es más sutil y se debe usar con moderación porque el usuario a menudo mantiene el Siri Remote en su mano y puede activar accidentalmente un evento de pulsación fácilmente.
  • No redefinir gestos estándar: el usuario tiene una expectativa de que gestos específicos realicen acciones específicas, no debe redefinir el significado ni la función de estos gestos en la aplicación. La única excepción es una aplicación de juego durante el juego activo.
  • Definir nuevos gestos con moderación: de nuevo, el usuario tiene una expectativa de que gestos específicos realicen acciones específicas. Debe evitar definir gestos personalizados para realizar acciones estándar. Y, nuevamente, los juegos son la excepción más habitual en la que los gestos personalizados pueden agregar diversión e inmersión al juego.
  • Si es apropiado, Responder a pulsaciones de cruceta virtual: pulsar ligeramente en los bordes de la esquina de la superficie táctil reaccionará como una cruceta virtual en un controlador de juego que mueve el foco o dirección hacia arriba, abajo, izquierda o derecha. Si procede, debes responder a estos gestos en su aplicación o juego.

Botones de Siri Remote

Además de los gestos en la Superficie táctil, la aplicación puede responder al usuario haciendo clic en la Superficie táctil o presionando el botón Reproducir/Pausa. Si accede al Siri Remote mediante el marco de controlador de juegos, también puede detectar que se presiona el botón Menú.

Además, se pueden detectar pulsaciones de botón de menú mediante un reconocedor de gestos con elementos de UIKit estándar. Si intercepta el botón Menú que se está presionando, será responsable de cerrar la vista actual y el controlador de vista y volver a la anterior.

Importante

Debe siempre asignar una función al botón Reproducir/Pausar en el control remoto. Tener un botón no funcional puede hacer que la aplicación se vea rota para el usuario final. Si no tiene una función válida para este botón, asigne la misma función que el botón principal (clic de superficie táctil).

Gestos y guiones gráficos

La manera más fácil de trabajar con Siri Remote en la aplicación Xamarin.tvOS es agregar reconocedores de gestos a las vistas en el Diseñador de interfaces.

Para agregar un reconocedor de gestos, haga lo siguiente:

  1. En el Explorador de soluciones, haga doble clic en el archivo Main.storyboard y ábralo para editar el Diseñador de interfaces.

  2. Arrastre un Reconocedor de gestos de pulsar desde la Biblioteca y colóquelo en la vista:

    Reconocedor de gestos de pulsación

  3. Active Seleccionar en la sección Botón del Inspector de atributos:

    Active Seleccionar

  4. Seleccionar significa que el gesto responderá al usuario haciendo clic en la Superficie táctil en el Siri Remote. También tiene la opción de responder a los botones Menú, Reproducir/Pausar, Arriba, Abajo, Izquierda y Derecha.

  5. A continuación, conecte una Acción desde el Reconocedor de gestos de pulsar y llámela TouchSurfaceClicked:

    Una acción del reconocedor de gestos de pulsación

  6. Guarde los cambios y vuelva a Visual Studio para Mac.

Edite el archivo Controlador de vistas (ejemplo FirstViewController.cs) y agregue el código siguiente para controlar el gesto que se desencadena:

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 obtener más información sobre cómo trabajar con guiones gráficos, consulte nuestra Guía de inicio rápido de Hello, tvOS. En concreto, las secciones Crear la interfaz de usuario y Escribir el código con salidas y acciones.

Gestos y código

Opcionalmente, puede crear gestos directamente en el código de C# y agregarlos a las vistas de la interfaz de usuario. Por ejemplo, para agregar una serie de reconocedores de gestos de deslizamiento, edite el controlador de vista y agregue el código siguiente:

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

Control de eventos de bajo nivel

Si va a crear un tipo personalizado basado en UIKit en la aplicación Xamarin.tvOS (por ejemplo UIView), también tiene la capacidad de proporcionar un control de bajo nivel de la pulsación de botones a través de eventos de UIPress.

Un evento de UIPress es para tvOS lo que un evento de UITouch es para iOS, excepto que UIPress devuelve información sobre pulsaciones de botones en el Siri Remote u otros dispositivos Bluetooth conectados (como un controlador de juegos). Los eventos UIPress describen el botón que se está presionando y su estado (Iniciado, Cancelado, Cambiado o Finalizado).

En el caso de los botones analógicos en dispositivos como controladores de juegos Bluetooth, UIPress también devuelve la cantidad de fuerza que se aplica al botón. La propiedad Type del evento UIPress define qué botón físico ha cambiado de estado, mientras que el resto de las propiedades describen el cambio que se produjo.

En el código siguiente se muestra un ejemplo de control de eventos de UIPress de bajo nivel para una 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
    }
}

Al igual que con los eventos UITouch, si necesita implementar cualquiera de las invalidaciones de eventos UIPress, debe implementar las cuatro.

Controladores de juegos Bluetooth

Además del Siri Remote estándar que se incluye con el Apple TV, los controladores de juegos Bluetooth Made For iOS (MFI) de terceros se pueden emparejar con el Apple TV y utilizar para controlar la aplicación Xamarin.tvOS.

Controladores de juegos Bluetooth

Los controladores de juego se pueden usar para mejorar el juego y proporcionar una sensación de inmersión en un juego. También se pueden usar para controlar la interfaz estándar de Apple TV, por lo que el uso no tiene que cambiar entre el mando remoto y el controlador.

Importante

Los controladores de juegos Bluetooth son una compra opcional que los usuarios finales pueden realizar, la aplicación no puede obligar al usuario a comprar uno. Si la aplicación admite controladores de juegos, también debe admitir el Siri Remote para que todos los usuarios de Apple TV puedan usar el juego.

Un controlador de juegos tiene las siguientes características y usos esperados dentro de la aplicación tvOS:

Característica Uso general de aplicaciones Uso de aplicaciones de juego
Cruceta Navega por los elementos de la interfaz de usuario (cambia el foco). Depende del juego.
A Activa el elemento seleccionado (en foco). Realiza la función de botón principal y confirma las acciones del cuadro de diálogo.
B Vuelve a la pantalla anterior o sale a la pantalla Inicio si se encuentra en la pantalla principal de la aplicación. Realiza la función de botón secundario o vuelve a la pantalla anterior.
X Inicia la reproducción multimedia o pausa o reanuda la reproducción. Depende del juego.
Y N/D Depende del juego.
Menu Vuelve a la pantalla anterior o sale a la pantalla Inicio si se encuentra en la pantalla principal de la aplicación. Pausa o reanuda el juego, vuelve a la pantalla anterior o sale a la pantalla Inicio si se encuentra en la pantalla principal de la aplicación.
Botón de hombro izquierdo Navega a la izquierda. Depende del juego.
Desencadenador izquierdo Navega a la izquierda. Depende del juego.
Botón de hombro derecho Navega a la derecha. Depende del juego.
Desencadenador derecho Navega a la derecha Depende del juego.
Palanca de control izquierda Navega por los elementos de la interfaz de usuario (cambia el foco). Depende del juego.
Palanca de control derecha N/D Depende del juego.

Apple proporciona las siguientes sugerencias para trabajar con controladores de juegos:

  • Confirmar conexiones de controlador de juegos: el usuario final puede iniciar y detener la aplicación tvOS en cualquier momento. Siempre debe comprobar la presencia de un controlador de juegos en los momentos de inicio o de despertar de la aplicación y tomar medidas según sea necesario.
  • Asegúrese de que su aplicación funciona tanto en los mandos Siri Remote como en controladores de juegos: no requiera que los usuarios cambien entre el Siri Remote y un controlador de juego para usar la aplicación. Pruebe la aplicación a menudo con ambos tipos de controladores, lo que garantiza que todo sea fácil de navegar y funcione según lo previsto.
  • Proporcionar un camino de vuelta: al presionar el botón Menú siempre debe volver a la pantalla anterior. Si el usuario está en la pantalla principal de la aplicación, el botón Menú debe devolverlo a la pantalla de Inicio de Apple TV. Durante el juego, el botón Menú debe mostrar una alerta que proporcione al usuario la capacidad de pausar o reanudar el juego o volver al menú principal.

Trabajar con controladores de juego

Como se indicó anteriormente, además del Siri Remote estándar que se incluye con el Apple TV, el usuario puede adjuntar opcionalmente controladores de juegos Bluetooth Made For iOS (MFI) de terceros y usarlos para controlar la aplicación Xamarin.tvOS.

Si la aplicación requiere una entrada de controlador de bajo nivel, puede usar el Marco de controlador de juegos de Apple que tiene las siguientes modificaciones para tvOS:

  • Se ha agregado el perfil del controlador de juego micro (GCMicroGamepad) para dirigirse al Siri Remote.
  • La nueva clase GCEventViewController se puede usar para enrutar eventos de controlador de juego a través de la aplicación. Consulte la sección Determinar la entrada del controlador de juego a continuación para obtener más detalles.

Requisitos de soporte técnico del controlador de juegos

Apple tiene varios requisitos específicos que deben cumplirse si la aplicación Xamarin.tvOS admite controladores de juegos:

  • Debe admitir el Siri Remote: siempre debe admitir el Siri Remote. Su juego no puede requerir que un mando de juego de terceros poder jugarse.
  • Debe admitir el diseño de control extendido: todos los controladores de juegos de tvOS son controladores extendidos que no se ajustan a la forma.
  • Los juegos deben poder jugarse con controladores independientes: si la aplicación admite un controlador de juego extendido, debe poder jugarse. únicamente con ese controlador de juego.
  • Debe admitir el botón Reproducir/Pausar: Durante el juego, si el usuario presiona el botón Reproducir/Pausa, debería mostrar una alerta que dé al usuario la posibilidad de pausar o reanudar el juego o volver al menú principal.

Habilitación de la compatibilidad con el controlador de juegos

Para habilitar la compatibilidad con el controlador de juegos en la aplicación Xamarin.tvOS, haga doble clic en el archivo Info.plist en el Explorador de soluciones para abrirlo y editarlo:

El editor info.plist

En la sección Controlador de juegos, active la casilla Habilitar controladores de juego y, a continuación, compruebe todos los tipos de controlador de juego compatibles con la aplicación.

Usar el Siri Remote como controlador de juego

El Siri Remote que viene con Apple TV se puede usar como controlador de juego limitado. Al igual que otros controladores de juegos, se muestra en el marco del controlador de juegos como un objeto GCController y admite los perfiles GCMotion y GCMicroGamepad.

Siri Remote tiene las siguientes características cuando se usa como controlador de juego:

  • La superficie táctil se puede usar como una cruceta virtual que proporciona datos de entrada analógicos.
  • El controlador remoto se puede usar en una orientación vertical o horizontal y la aplicación decide si el objeto de perfil debe voltear los datos de entrada automáticamente.
  • Al hacer clic en la superficie táctil, se puede presionar el botón A en un controlador de juego.
  • El botón Reproducir/Pausa actúa como el botón X en un controlador de juego.
  • El botón Menú debe mostrar una alerta que proporcione al usuario la capacidad de pausar o reanudar el juego o volver al menú principal.

Determinar la entrada del controlador de juego

A diferencia de iOS en el que los eventos de controlador de juegos se pueden recibir en paralelo con eventos táctiles, tvOS procesa todos los eventos de bajo nivel para ofrecer eventos de UIKit de alto nivel. Como resultado, si necesita acceso a los eventos de controlador de juegos de bajo nivel, tendrá que desactivar el comportamiento predeterminado de UIKit.

En tvOS, cuando quiera procesar la entrada del controlador de juegos directamente necesita usar una GCEventViewController (o una subclase) para mostrar la interfaz de usuario del juego. Cada vez que un GCEventViewController sea el Primer respondedor, la entrada del controlador de juegos se capturará y entregará a la aplicación a través del marco del controlador de juegos.

Puede usar la propiedad UserInteractionEnabled de la clase GCEventViewController para alternar cómo se procesan y controlan los eventos.

Para obtener información sobre cómo implementar la compatibilidad con el controlador de juegos, consulte la sección Trabajar con controladores de juegos de Apple en la Guía de programación de aplicaciones para tvOS y Guía de programación de controladores de juegos.

Resumen

En este artículo se ha tratado el nuevo Siri Remote que se incluye con el Apple TV, los gestos de superficie táctil y botones de Siri Remote. Después, se abordó cómo trabajar con gestos y guiones gráficos, gestos y código y eventos de bajo nivel. Por último, se explicó cómo trabajar con controladores de juegos.