Поделиться через


watchOS Complications in Xamarin

watchOS позволяет разработчикам создавать пользовательские осложнения для часовых лиц

На этой странице объясняется различные типы доступных осложнений и как добавить осложнение в приложение watchOS 3.

Обратите внимание, что каждое приложение watchOS может иметь только одно осложнение.

Начните с чтения документации Apple, чтобы определить, подходит ли ваше приложение для осложнений. Существует 5 CLKComplicationFamily типов отображения для выбора:

The 5 CLKComplicationFamily types available: Circular Small, Modular Small, Modular Large, Utilitarian Small, Utilitarian Large

Приложения могут реализовать только один стиль или все пять в зависимости от отображаемых данных. Вы также можете поддерживать поездки по времени, предоставляя значения для прошлых и /или будущих времен, когда пользователь превращает цифровую корону.

Добавление осложнения

Настройка

Осложнения можно добавить в приложение наблюдения во время создания или добавить вручную в существующее решение.

Добавление нового проекта...

Мастер добавления нового проекта... включает проверка box, который автоматически создаст класс контроллера осложнений и настроит файл Info.plist:

The Include Complication checkbox

Существующие проекты

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

  1. Создайте файл класса ComplicationController.cs и реализуйте CLKComplicationDataSource.
  2. Настройте info.plist приложения для предоставления осложнений и идентификации, какие семьи осложнений поддерживаются.

Эти шаги подробно описаны ниже.

Класс CLKComplicationDataSource

Следующий шаблон C# включает минимальные необходимые методы для реализации CLKComplicationDataSource.

[Register ("ComplicationController")]
public class ComplicationController : CLKComplicationDataSource
{
  public ComplicationController ()
  {
  }
  public override void GetPlaceholderTemplate (CLKComplication complication, Action<CLKComplicationTemplate> handler)
  {
  }
  public override void GetCurrentTimelineEntry (CLKComplication complication, Action<CLKComplicationTimelineEntry> handler)
  {
  }
  public override void GetSupportedTimeTravelDirections (CLKComplication complication, Action<CLKComplicationTimeTravelDirections> handler)
  {
  }
}

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

Info.plist

Файл Info.plist расширения watch должен указать имя CLKComplicationDataSource и какие семейства осложнений, которые вы хотите поддержать:

The complication family types

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

CLKComplicationDataSource

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

Обязательные методы

Для выполнения осложнения необходимо реализовать следующие методы:

  • GetPlaceholderTemplate — возвращает статический дисплей, используемый во время настройки или когда приложение не может предоставить значение.
  • GetCurrentTimelineEntry — вычислите правильное отображение при выполнении осложнения.
  • GetSupportedTimeTravelDirections— возвращает такие параметрыCLKComplicationTimeTravelDirections, как None, Forwardили BackwardForward | Backward.

Конфиденциальность

Осложнения, отображающие персональные данные

  • GetPrivacyBehavior - CLKComplicationPrivacyBehavior.ShowOnLockScreen или HideOnLockScreen

Если этот метод возвращается HideOnLockScreen , то при блокировке часов будет отображаться значок или имя приложения (а не данные).

Обновления

  • GetNextRequestedUpdateDate — возвращает время, когда операционная система должна выполнить следующий запрос к приложению для обновленных данных о сложном отображении.

Вы также можете принудительно обновить приложение iOS.

Поддержка перемещения по времени

Поддержка поездок по времени является необязательной и управляется методом GetSupportedTimeTravelDirections . Если он возвращается Forward, Backwardили Forward | Backward необходимо реализовать следующие методы.

  • GetTimelineStartDate
  • GetTimelineEndDate
  • GetTimelineEntriesBeforeDate
  • GetTimelineEntriesAfterDate

Написание осложнения

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

Пример кода

В этом примере поддерживается UtilitarianLarge только шаблон, поэтому его можно выбрать только на определенных лицах наблюдения, которые поддерживают этот тип сложности. При выборе осложнений на часы отображается MY COMPLICATION и при запуске отображается текстовый час MINUTE (с частью времени).

[Register ("ComplicationController")]
public class ComplicationController : CLKComplicationDataSource
{
    public ComplicationController ()
    {
    }
    public ComplicationController (IntPtr p) : base (p)
    {
    }
    public override void GetCurrentTimelineEntry (CLKComplication complication, Action<CLKComplicationTimelineEntry> handler)
    {
        CLKComplicationTimelineEntry entry = null;
    var complicationDisplay = "MINUTE " + DateTime.Now.Minute.ToString(); // text to display on watch face
        if (complication.Family == CLKComplicationFamily.UtilitarianLarge)
        {
            var textTemplate = new CLKComplicationTemplateUtilitarianLargeFlat();
            textTemplate.TextProvider = CLKSimpleTextProvider.FromText(complicationDisplay); // dynamic display
            entry = CLKComplicationTimelineEntry.Create(NSDate.Now, textTemplate);
        } else {
            Console.WriteLine("Complication family timeline not supported (" + complication.Family + ")");
        }
        handler (entry);
    }
    public override void GetPlaceholderTemplate (CLKComplication complication, Action<CLKComplicationTemplate> handler)
    {
        CLKComplicationTemplate template = null;
        if (complication.Family == CLKComplicationFamily.UtilitarianLarge) {
            var textTemplate = new CLKComplicationTemplateUtilitarianLargeFlat ();
            textTemplate.TextProvider = CLKSimpleTextProvider.FromText ("MY COMPLICATION"); // static display
            template = textTemplate;
        } else {
            Console.WriteLine ("Complication family placeholder not not supported (" + complication.Family + ")");
        }
        handler (template);
    }
    public override void GetSupportedTimeTravelDirections (CLKComplication complication, Action<CLKComplicationTimeTravelDirections> handler)
    {
        handler (CLKComplicationTimeTravelDirections.None);
    }
}

Шаблоны осложнений

Существует ряд различных шаблонов, доступных для каждого стиля сложности. Шаблоны "Кольцо" позволяют отображать кольцо стиля выполнения вокруг сложности, которое можно использовать для отображения хода выполнения или другого значения графически.

Документация Apple CLKComplicationTemplate

Циклический маленький

Эти имена классов шаблонов все префиксируются с помощью CLKComplicationTemplateCircularSmallследующих элементов:

  • RingImage — отображение одного изображения с кругом выполнения вокруг него.
  • RingText — отображение одной строки текста с кругом выполнения вокруг него.
  • SimpleImage — просто отображает небольшое одно изображение.
  • SimpleText — просто отображает небольшой фрагмент текста.
  • StackImage — отображение изображения и строки текста, один над другим
  • StackText — отображение двух строк текста.

Модульный небольшой

Эти имена классов шаблонов все префиксируются с помощью CLKComplicationTemplateModularSmallследующих элементов:

  • ColumnsText — отображение небольшой сетки текстовых значений (2 строки и 2 столбца).
  • RingImage — отображение одного изображения с кругом выполнения вокруг него.
  • RingText — отображение одной строки текста с кругом выполнения вокруг него.
  • SimpleImage — просто отображает небольшое одно изображение.
  • SimpleText — просто отображает небольшой фрагмент текста.
  • StackImage — отображение изображения и строки текста, один над другим
  • StackText — отображение двух строк текста.

Модульный большой

Эти имена классов шаблонов все префиксируются с помощью CLKComplicationTemplateModularLargeследующих элементов:

  • Столбцы — отображение сетки из 3 строк с 2 столбцами, при необходимости включая изображение слева от каждой строки.
  • StandardBody — отображает полужирную строку заголовка с двумя строками обычного текста. Заголовок может отображать изображение слева.
  • Таблица — отображение полужирной строки заголовка с сеткой текста 2x2 под ним. Заголовок может отображать изображение слева.
  • TallBody — отображает полужирную строку заголовка с более крупным шрифтом под текстом.

Служебная небольшая

Эти имена классов шаблонов все префиксируются с помощью CLKComplicationTemplateUtilitarianSmallследующих элементов:

  • Неструктурированный — отображает изображение и текст в одной строке (текст должен быть коротким).
  • RingImage — отображение одного изображения с кругом выполнения вокруг него.
  • RingText — отображение одной строки текста с кругом выполнения вокруг него.
  • Квадратный — отображение квадратного изображения (40 пикселей или 44px квадрата для 38mm или 42mm Apple Watch соответственно).

Служебная большая

Существует только один шаблон для этого стиля сложности: CLKComplicationTemplateUtilitarianLargeFlat Он отображает одно изображение и некоторый текст, все на одной строке.