Контроллеры Siri Remote и Bluetooth для tvOS в Xamarin

Пользователи приложения Xamarin.tvOS не будут взаимодействовать с интерфейсом напрямую, как с iOS, где они касаются изображений на экране устройства, но косвенно из комнаты с помощью Siri Remote.

Если ваше приложение является игрой, вы можете при необходимости создать в поддержке 3-й стороны, Сделано для iOS (MFI) Игровые контроллеры Bluetooth в приложении, а также.

The Bluetooth Remote and Game Controller

В этой статье описываются жесты Siri Remote, Touch Surface и удаленные кнопки Siri, а также показано, как работать с ними с помощью жестов и раскадровки, жестов и обработкисобытий низкого уровня. Наконец, он обсуждает работу с игровыми контроллерами в приложении Xamarin.tvOS.

Удаленное подключение Siri

Основным способом взаимодействия пользователей с Apple TV и приложением Xamarin.tvOS является включенный Siri Remote. Apple разработала удаленный, чтобы мостить расстояние между пользователем, сидящим на диване, и пользовательский интерфейс Apple TV, отображаемый через комнату на экране телевизора.

Ваша задача в качестве разработчика приложения tvOS — это создание быстрого, простого и визуально привлекательного пользовательского интерфейса, который использует сенсорный интерфейс Siri Remote, акселерометр, гиро область и кнопки.

The Siri Remote

Siri Remote имеет следующие функции и ожидаемые возможности в приложении tvOS:

Функция Общее использование приложений Использование игровых приложений
Сенсорный поверхность
Проводите пальцем, чтобы перейти, нажмите, чтобы выбрать и сохранить контекстные меню.
Коснитесь или проводите пальцем
Навигация пользовательского интерфейса между фокусируемыми элементами.

Щелчок
Активирует выбранный элемент (в фокусе).
Коснитесь или проводите пальцем
Зависит от дизайна игры и может использоваться в качестве D-Pad, касаясь края.

Щелчок
Выполнение основной функции кнопки.
Menu
Нажмите, чтобы вернуться к предыдущему экрану или меню.
Возвращается на предыдущий экран и выходит на домашний экран Apple TV с главного экрана приложения. Приостановка и возобновление игрового процесса, возвращение к предыдущему экрану и выход на домашний экран Apple TV с главного экрана приложения.
Siri/Search
В странах с Siri нажмите и удерживайте для голосового управления во всех других странах экран поиска.
Недоступно Недоступно
Воспроизведение и приостановка
Воспроизведение и приостановка мультимедиа или предоставление вторичной функции в приложениях.
Запускает воспроизведение мультимедиа и приостановку и возобновление воспроизведения. Выполняет функцию вторичной кнопки или пропускает видео интро (если существует).
Домашняя страница
Нажмите, чтобы вернуться на начальный экран, дважды щелкните, чтобы отобразить запущенные приложения, нажмите и удерживайте на спящей устройстве.
Недоступно Недоступно
Объем
Управляет подключенным томом аудио- и видеооборудования.
Недоступно Недоступно

Жесты сенсорной поверхности

Surface Touch Surface Siri Remote может обнаруживать различные жесты с одним пальцем, которые можно ответить в приложении Xamarin.tvOS:

Swipe Щелчок Тематический поиск
Moves selection Actives the selected item Directional buttons
Перемещает выделение (фокус) между элементами пользовательского интерфейса на экране (вверх, вниз влево, вправо). Прокрутка может использоваться для прокрутки больших списков содержимого быстро с помощью инерции. Активирует выбранный (в фокусе) элемент или действует как первичная кнопка в игре. Щелчки и удержание могут активировать контекстные меню или вторичные функции. Легко касание сенсорной поверхности на краях действует как кнопки направления на D-Pad, перемещаясь фокус вверх, вниз, влево или вправо в зависимости от области. В зависимости от приложения можно использовать для отображения скрытых элементов управления.

Apple предоставляет следующие предложения по работе с жестами Touch Surface:

  • Различие между щелчками и касаниями . Щелчки — это намеренное действие пользователя и хорошо подходит для выбора, активации и основной кнопки игры. Касание является более тонким и следует использовать смешно, так как пользователь часто держит Siri Remote в руке и может случайно активировать событие Tap легко.
  • Не переопределяете стандартные жесты. Пользователь ожидает, что определенные жесты будут выполнять определенные действия, не следует переопределить значение или функцию этих жестов в приложении. Одним из исключений является игровое приложение во время активного игрового процесса.
  • Определите новые жесты разреженно . Опять же, пользователь ожидает, что определенные жесты будут выполнять определенные действия. Следует избегать определения пользовательских жестов для выполнения стандартных действий. И опять же, игры являются самым обычным исключением, где пользовательские жесты могут добавлять веселье, иммерсивное играть в игру.
  • При необходимости ответьте на касания D-Pad - легко касание на угловых краях сенсорной поверхности будет реагировать, как D-Pad на игровом контроллере, перемещая фокус или направление вверх, вниз, влево или вправо. При необходимости вы должны реагировать на эти жесты в приложении или игре.

Удаленные кнопки Siri

Помимо жестов на Сенсорной поверхности, приложение может реагировать на пользователя, щелкнув Touch Surface или нажав кнопку Воспроизведения и приостановки. Если вы обращаетесь к Siri Remote с помощью платформы игрового контроллера, вы также можете обнаружить нажатие кнопки меню.

Кроме того, нажатия кнопки меню можно обнаружить с помощью распознавателя жестов со стандартными UIKit элементами. Если вы перехватываете нажатие кнопки меню, вы будете отвечать за закрытие текущего контроллера представления и просмотра и возврата к предыдущему.

Внимание

Вы всегда должны назначить функцию кнопке Воспроизведения и приостановки на удаленном устройстве. При наличии нефункциональную кнопку приложение может выглядеть сломанным для конечного пользователя. Если у вас нет допустимой функции для этой кнопки, назначьте ту же функцию, что и основная кнопка (touch Surface Click).

Жесты и раскадровки

Самый простой способ работать с Siri Remote в приложении Xamarin.tvOS — добавить распознаватели жестов в представления в конструкторе интерфейсов.

Чтобы добавить распознаватель жестов, сделайте следующее:

  1. В Обозреватель решений дважды щелкните Main.storyboard файл и откройте его для редактирования конструктора интерфейсов.

  2. Перетащите распознаватель жестов касания из библиотеки и удалите его в представлении:

    A Tap Gesture Recognizer

  3. Установите флажок "Выбрать" в разделе "Кнопка" инспектора атрибутов:

    Check Select

  4. Выбор означает, что жест будет отвечать пользователю, щелкнув Touch Surface на удаленном устройстве Siri. Вы также можете отвечать на кнопки меню, воспроизведения и приостановки, вверх, вниз, слева и вправо.

  5. Затем подключите действие из распознавателя жестов касания и вызовите егоTouchSurfaceClicked:

    An Action from the Tap Gesture Recognizer

  6. Сохраните изменения и вернитесь к Visual Studio для Mac.

Измените файл контроллера представления (пример FirstViewController.cs) и добавьте следующий код для обработки вызываемого жеста:

using System;
using UIKit;

namespace tvRemote
{
    public partial class FirstViewController : UIViewController
    {
        ...

        #region Custom Actions
        partial void TouchSurfaceClicked (Foundation.NSObject sender) {
            // Handle click here
            ...
        }
        #endregion
    }
}

Дополнительные сведения о работе с раскадровками см. в руководстве по началу работы с раскадровки Hello, tvOS. В частности, создание пользовательского интерфейса и написание кода с разделами точек и действий .

Жесты и код

При необходимости можно создавать жесты непосредственно в коде C# и добавлять их в представления в пользовательском интерфейсе. Например, чтобы добавить ряд распознавателей жестов пальцем, измените контроллер представления и добавьте следующий код:

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

Обработка событий низкого уровня

Если вы создаете настраиваемый тип на UIKit основе приложения Xamarin.tvOS (например UIView), вы также можете обеспечить низкоуровневую обработку нажатия кнопки с помощью UIPress событий.

UIPress Событие заключается в том, чтобы tvOS, что UITouch такое событие в iOS, за исключением UIPress возврата сведений о нажатии кнопки на удаленном устройстве Siri или других подключенных устройствах Bluetooth (например, игровом контроллере). UIPress события описывают нажатие кнопки и его состояние (начало, отмена, изменение или окончание).

Для аналоговых кнопок на таких устройствах, как контроллеры игры Bluetooth, UIPress также возвращается количество принудительного применения к кнопке. Свойство Type события определяет, какое физическое UIPress состояние кнопки изменилось, а остальные свойства описывают изменения, которые произошли.

В следующем коде показан пример обработки событий низкого уровня UIPress для 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
    }
}

Как и в UITouch случае с событиями, если необходимо реализовать любую из UIPress переопределения событий, следует реализовать все четыре.

Контроллеры игры Bluetooth

Помимо стандартного Siri Remote, который поставляется с Apple TV, 3-й стороной, Сделано для iOS (MFI) Игровые контроллеры Bluetooth можно связать с Apple TV и использовать для управления приложением Xamarin.tvOS.

Bluetooth Game Controllers

Игровые контроллеры можно использовать для улучшения игрового процесса и обеспечения чувства погружения в игру. Они также могут использоваться для управления стандартным интерфейсом Apple TV, поэтому использовать не нужно переключаться между удаленным и контроллером.

Внимание

Контроллеры игры Bluetooth являются необязательным приобретением, которое могут сделать конечные пользователи, ваше приложение не может принудительно приобрести его. Если приложение поддерживает игровые контроллеры, оно также должно поддерживать Siri Remote, чтобы игра была использоваться всеми пользователями Apple TV.

Игровой контроллер имеет следующие функции и ожидаемые возможности в приложении tvOS:

Функция Общее использование приложений Использование игровых приложений
D-Pad Перемещается через элементы пользовательского интерфейса (фокус изменений). Зависит от игры.
Объект Активирует выбранный элемент (в фокусе). Выполняет основную функцию кнопки и подтверждает действия диалога.
B Возвращается к предыдущему экрану или выходит на начальный экран, если на главном экране приложения. Выполняет функцию вторичной кнопки или возвращается на предыдущий экран.
X Запускает воспроизведение мультимедиа или приостанавливает или возобновляет воспроизведение. Зависит от игры.
Y Н/Д Зависит от игры.
Menu Возвращается к предыдущему экрану или выходит на начальный экран, если на главном экране приложения. Приостановка и возобновление игрового процесса, возврат к предыдущему экрану или выход на домашний экран, если на главном экране приложения.
Левая кнопка плеча Перемещается влево. Зависит от игры.
Левый триггер Перемещается влево. Зависит от игры.
Правая кнопка плеча Переходит вправо. Зависит от игры.
Правый триггер Переход вправо Зависит от игры.
Левый палец Перемещается через элементы пользовательского интерфейса (фокус изменений). Зависит от игры.
Правый палец Н/Д Зависит от игры.

Apple предоставляет следующие предложения по работе с игровыми контроллерами:

  • Убедитесь, что игровой контроллер Подключение ions — ваше приложение tvOS можно запустить и остановить в любое время конечным пользователем. Вы всегда должны проверка для присутствия игрового контроллера во время начала или пробуждения приложения и принять меры по мере необходимости.
  • Убедитесь, что ваше приложение работает на удаленных и игровых контроллерах Siri. Не требуется, чтобы пользователи переключались между Siri Remote и игровым контроллером для использования приложения. Часто тестируйте приложение с обоими типами контроллеров, гарантируя, что все легко перемещаться и работать должным образом.
  • Укажите обратный путь . Нажатие кнопки меню всегда должно возвращаться на предыдущий экран. Если пользователь находится на главном экране приложения, кнопка меню должна вернуть их на домашний экран Apple TV. Во время игрового процесса кнопка меню должна отображать оповещение, которое дает пользователю возможность приостановить или возобновить игровой процесс или вернуться в главное меню.

Работа с игровыми контроллерами

Как уже упоминалось выше, помимо стандартного Siri Remote, который поставляется с Apple TV, пользователь может при необходимости подключить 3-ю сторону, Сделано для iOS (MFI) Игровые контроллеры Bluetooth и использовать его для управления вашим приложением Xamarin.tvOS.

Если вашему приложению требуется низкоуровневый ввод контроллера, можно использовать Платформу игрового контроллера Apple, которая имеет следующие изменения для tvOS:

  • Профиль контроллера микро игр (GCMicroGamepad) был добавлен для назначения Siri Remote.
  • Новый GCEventViewController класс можно использовать для маршрутизации событий игрового контроллера через приложение. Дополнительные сведения см. в разделе "Определение входных данных игрового контроллера".

Требования к поддержке игрового контроллера

Apple имеет несколько конкретных требований, которые должны быть выполнены, если ваше приложение Xamarin.tvOS поддерживает игровые контроллеры:

  • Вы должны поддерживать удаленный Siri— всегда должны поддерживать Siri Remote . Ваша игра не может требовать, чтобы 3-й партийный игровой контроллер был доступен для игры.
  • Необходимо поддерживать макет расширенного элемента управления. Все игровые контроллеры tvOS не являются формообразующие, расширенные контроллеры.
  • Игры должны быть играемыми с автономными контроллерами . Если ваше приложение поддерживает расширенный игровой контроллер, он должен быть доступен только с этим игровым контроллером.
  • Вы должны поддерживать кнопку воспроизведения и приостановки. Во время игрового процесса пользователь нажимает кнопку "Воспроизведение и пауза", вы должны отобразить оповещение, которое дает пользователю возможность приостановить или возобновить игровой процесс или вернуться в главное меню.

Включение поддержки игрового контроллера

Чтобы включить поддержку game Controller в приложении Xamarin.tvOS, дважды щелкните Info.plist файл в Обозреватель решений, чтобы открыть его для редактирования:

The Info.plist editor

В разделе "Игровой контроллер" поместите проверка, включите игровые контроллеры, а затем проверка все типы игровых контроллеров, которые будут поддерживаться приложением.

Использование Siri Remote в качестве игрового контроллера

Siri Remote, который предоставляет Apple TV, можно использовать в качестве ограниченного игрового контроллера. Как и другие игровые контроллеры, он отображается в game Controller Framework в качестве GCController объекта и поддерживает как GCMotion профили, так и GCMicroGamepad профили.

Siri Remote имеет следующие характеристики при использовании в качестве игрового контроллера:

  • Touch Surface можно использовать в качестве D-панели, которая предоставляет аналоговые входные данные.
  • Удаленный можно использовать в книжной или альбомной ориентации, и приложение решает, должен ли объект профиля автоматически перевернуть входные данные.
  • Нажатие сенсорной поверхности действует как нажатие кнопки A на игровом контроллере.
  • Кнопка воспроизведения и приостановки действует как кнопка X на игровом контроллере.
  • Кнопка меню должна отображать оповещение, которое дает пользователю возможность приостановить или возобновить игровой процесс или вернуться в главное меню.

Определение входных данных игрового контроллера

В отличие от iOS, где события игрового контроллера можно получать параллельно с событиями Touch, tvOS обрабатывает все низкоуровневые события, чтобы обеспечить высокоуровневые UIKit события. В результате, если вам нужен доступ к событиям контроллера игры низкого уровня, необходимо отключить UIKitповедение по умолчанию.

В tvOS, если вы хотите обрабатывать входные данные игрового контроллера непосредственно необходимо использовать ( GCEventViewController или подкласс) для отображения пользовательского интерфейса игры. Всякий раз, когда GCEventViewController используется первый ответ, входные данные игрового контроллера будут записаны и доставлены в приложение через платформу игрового контроллера.

Свойство класса можно использовать UserInteractionEnabledGCEventViewController для переключения обработки и обработки событий.

Сведения о реализации поддержки игрового контроллера см. в разделе "Работа с игровыми контроллерами" в руководстве по программированию приложений для tvOS и игрового контроллера.

Итоги

В этой статье рассматриваются новые Siri Remote, которые поставляется с apple TV, жестами Touch Surface и кнопками Siri Remote. Далее он рассмотрел работу с жестами и раскадровки, жестами и кодом и событиями низкого уровня. Наконец, если обсуждается работа с игровыми контроллерами.