Complicaciones de watchOS en Xamarin
watchOS permite a los desarrolladores escribir complicaciones personalizadas para las caras de inspección
En esta página se explican los diferentes tipos de complicaciones disponibles y cómo agregar una complicación a la aplicación watchOS 3.
Tenga en cuenta que cada aplicación watchOS solo puede tener una complicación.
Empiece leyendo documentos de Apple para determinar si la aplicación es adecuada para una complicación. Hay 5 CLKComplicationFamily
tipos de pantalla entre los que elegir:
Las aplicaciones pueden implementar solo un estilo o los cinco, en función de los datos que se muestren. También puede admitir Viaje en tiempo, proporcionando valores para tiempos pasados o futuros a medida que el usuario convierte el Digital Crown.
Agregar una complicación
Configuración
Las complicaciones se pueden agregar a una aplicación de inspección durante la creación o agregarse manualmente a una solución existente.
Agregar nuevo proyecto...
El asistente Agregar nuevo proyecto... incluye una casilla que creará automáticamente una clase de controlador de complicaciones y configurará el archivoInfo.plist:
Proyectos existentes
Para agregar una complicación a un proyecto existente:
- Cree un nuevo archivo de clase ComplicationController.cs y lo implemente
CLKComplicationDataSource
. - Configure info.plist de la aplicación para exponer la complicación e identificar qué familias de complicaciones se admiten.
Estos pasos se describen con más detalle a continuación.
Clase CLKComplicationDataSource
La siguiente plantilla de C# incluye los métodos mínimos necesarios para implementar un 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)
{
}
}
Siga las instrucciones de Escritura de una complicación para agregar código a esta clase.
Info.plist
El archivo Info.plist de la extensión watch debe especificar el nombre del CLKComplicationDataSource
y las familias de complicaciones que desea admitir:
La lista de entradas de clase de origen de datos mostrará los nombres de clase que la subclase CLKComplicationDataSource
incluye la lógica de complicaciones.
CLKComplicationDataSource
Toda la funcionalidad de complicaciones se implementa en una sola clase, reemplazando métodos de la clase abstracta CLKComplicationDataSource
(que implementa la interfaz ICLKComplicationDataSource
).
Métodos necesarios
Debe implementar los siguientes métodos para que se ejecute la complicación:
GetPlaceholderTemplate
: devuelve la pantalla estática que se usa durante la configuración o cuando la aplicación no puede proporcionar un valor.GetCurrentTimelineEntry
: calcule la pantalla correcta cuando se esté ejecutando la complicación.GetSupportedTimeTravelDirections
: devuelve opciones deCLKComplicationTimeTravelDirections
comoNone
,Forward
,Backward
oForward | Backward
.
Privacidad
Complicaciones que muestran datos personales
GetPrivacyBehavior
-CLKComplicationPrivacyBehavior.ShowOnLockScreen
oHideOnLockScreen
Si este método devuelve HideOnLockScreen
, la complicación mostrará un icono o el nombre de la aplicación (y no ningún dato) cuando el reloj esté bloqueado.
Actualizaciones
GetNextRequestedUpdateDate
: devuelve una hora en la que el sistema operativo debe consultar la aplicación para obtener datos de visualización de complicaciones actualizados.
También puede forzar una actualización desde la aplicación de iOS.
Compatibilidad con Viaje en el tiempo
La compatibilidad con Viaje en el tiempo es opcional y se controla mediante el método GetSupportedTimeTravelDirections
. Si devuelve Forward
, Backward
o Forward | Backward
, a continuación, debe implementar los métodos siguientes
GetTimelineStartDate
GetTimelineEndDate
GetTimelineEntriesBeforeDate
GetTimelineEntriesAfterDate
Escribir una complicación
Las complicaciones abarcan desde la visualización de datos simples hasta imágenes complicadas y la representación de datos con compatibilidad con viajes de tiempo. El código siguiente muestra cómo crear una sencilla y sencilla complicaciones de plantilla única.
Código de ejemplo
Este ejemplo solo admite la plantilla UtilitarianLarge
, por lo que solo se puede seleccionar en caras de inspección específicas que admitan ese tipo de complicaciones. Al seleccionar complicaciones en un watch, muestra MIS COMPLICACIONES y cuando se ejecuta muestra el texto MINUTO hora (con una parte del tiempo).
[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);
}
}
Plantillas de complicaciones
Hay una serie de plantillas diferentes disponibles para cada estilo de complicaciones. Las plantillas Ring le permiten mostrar un anillo de estilo de progreso alrededor de la complicación, que se puede usar para mostrar el progreso o algún otro valor gráficamente.
Documentos de CLKComplicationTemplate de Apple
Circular Small
Estos nombres de clase de plantilla tienen el prefijo CLKComplicationTemplateCircularSmall
:
- RingImage: muestra una sola imagen, con un anillo de progreso alrededor de ella.
- RingText: muestra una sola línea de texto, con un anillo de progreso alrededor de él.
- SimpleImage: solo tiene que mostrar una imagen pequeña.
- SimpleText: solo tiene que mostrar un pequeño fragmento de texto.
- StackImage: mostrar una imagen y una línea de texto, una encima de la otra
- StackText: muestra dos líneas de texto.
Modular Small
Estos nombres de clase de plantilla tienen el prefijo CLKComplicationTemplateModularSmall
:
- ColumnsText: muestra una cuadrícula pequeña de valores de texto (2 filas y 2 columnas).
- RingImage: muestra una sola imagen, con un anillo de progreso alrededor de ella.
- RingText: muestra una sola línea de texto, con un anillo de progreso alrededor de él.
- SimpleImage: solo tiene que mostrar una imagen pequeña.
- SimpleText: solo tiene que mostrar un pequeño fragmento de texto.
- StackImage: mostrar una imagen y una línea de texto, una encima de la otra
- StackText: muestra dos líneas de texto.
Modular Large
Estos nombres de clase de plantilla tienen el prefijo CLKComplicationTemplateModularLarge
:
- Columnas: muestra una cuadrícula de 3 filas con 2 columnas, incluida opcionalmente una imagen a la izquierda de cada fila.
- StandardBody: muestra una cadena de encabezado en negrita, con dos filas de texto sin formato. El encabezado puede mostrar opcionalmente una imagen a la izquierda.
- Tabla : muestra una cadena de encabezado en negrita, con una cuadrícula de 2x2 de texto debajo de ella. El encabezado puede mostrar opcionalmente una imagen a la izquierda.
- TallBody: muestra una cadena de encabezado en negrita, con una sola línea de texto de fuente más grande debajo.
Utilitarian Small
Estos nombres de clase de plantilla tienen el prefijo CLKComplicationTemplateUtilitarianSmall
:
- Plano: muestra una imagen y algún texto en una sola línea (el texto debe ser corto).
- RingImage: muestra una sola imagen, con un anillo de progreso alrededor de ella.
- RingText: muestra una sola línea de texto, con un anillo de progreso alrededor de él.
- Cuadrado : muestra una imagen cuadrada (40 píxeles o 44 píxeles cuadrados para Apple Watch de 38 mm o 42 mm, respectivamente).
Utilitarian Large
Solo hay una plantilla para este estilo de complicaciones: CLKComplicationTemplateUtilitarianLargeFlat
.
Muestra una sola imagen y algún texto, todo en una sola línea.