watchOS Complications in Xamarin
watchOS позволяет разработчикам создавать пользовательские осложнения для часовых лиц
На этой странице объясняется различные типы доступных осложнений и как добавить осложнение в приложение watchOS 3.
Обратите внимание, что каждое приложение watchOS может иметь только одно осложнение.
Начните с чтения документации Apple, чтобы определить, подходит ли ваше приложение для осложнений. Существует 5 CLKComplicationFamily
типов отображения для выбора:
Приложения могут реализовать только один стиль или все пять в зависимости от отображаемых данных. Вы также можете поддерживать поездки по времени, предоставляя значения для прошлых и /или будущих времен, когда пользователь превращает цифровую корону.
Добавление осложнения
Настройка
Осложнения можно добавить в приложение наблюдения во время создания или добавить вручную в существующее решение.
Добавление нового проекта...
Мастер добавления нового проекта... включает проверка box, который автоматически создаст класс контроллера осложнений и настроит файл Info.plist:
Существующие проекты
Чтобы добавить осложнение в существующий проект, выполните приведенные далее действия.
- Создайте файл класса ComplicationController.cs и реализуйте
CLKComplicationDataSource
. - Настройте 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
и какие семейства осложнений, которые вы хотите поддержать:
В списке записей класса источника данных будут показаны имена классов, подклассы CLKComplicationDataSource
, которые включают логику осложнений.
CLKComplicationDataSource
Все функциональные возможности осложнений реализованы в одном классе, переопределяя методы из CLKComplicationDataSource
абстрактного класса (который реализует ICLKComplicationDataSource
интерфейс).
Обязательные методы
Для выполнения осложнения необходимо реализовать следующие методы:
GetPlaceholderTemplate
— возвращает статический дисплей, используемый во время настройки или когда приложение не может предоставить значение.GetCurrentTimelineEntry
— вычислите правильное отображение при выполнении осложнения.GetSupportedTimeTravelDirections
— возвращает такие параметрыCLKComplicationTimeTravelDirections
, какNone
,Forward
илиBackward
Forward | 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
Он отображает одно изображение и некоторый текст, все на одной строке.