Compartir a través de


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:

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

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:

The Include Complication checkbox

Proyectos existentes

Para agregar una complicación a un proyecto existente:

  1. Cree un nuevo archivo de clase ComplicationController.cs y lo implementeCLKComplicationDataSource.
  2. 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:

The complication family types

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 de CLKComplicationTimeTravelDirections como None, Forward, Backward o Forward | Backward.

Privacidad

Complicaciones que muestran datos personales

  • GetPrivacyBehavior - CLKComplicationPrivacyBehavior.ShowOnLockScreen o HideOnLockScreen

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.