Condividi tramite


watchOS Complicazioni in Xamarin

watchOS consente agli sviluppatori di scrivere complicazioni personalizzate per guardare i visi

Questa pagina illustra i diversi tipi di complicazioni disponibili e come aggiungere una complicazione all'app watchOS 3.

Si noti che ogni applicazione watchOS può avere una sola complicazione.

Per iniziare, leggere la documentazione di Apple per determinare se l'app è adatta a una complicazione. Esistono 5 CLKComplicationFamily tipi di visualizzazione tra cui scegliere:

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

Le app possono implementare solo uno stile o tutti e cinque, a seconda dei dati visualizzati. Puoi anche supportare Il viaggio temporale, fornendo valori per i tempi passati e/o futuri quando l'utente trasforma la Corona Digitale.

Aggiunta di una complicazione

Impostazione

Le complicazioni possono essere aggiunte a un'app watch durante la creazione o aggiunte manualmente a una soluzione esistente.

Aggiungi nuovo progetto...

La procedura guidata Aggiungi nuovo progetto include una casella di controllo che creerà automaticamente una classe controller di complicazione e configurerà il file Info.plist :

The Include Complication checkbox

Progetti esistenti

Per aggiungere una complicazione a un progetto esistente:

  1. Creare un nuovo file di classe ComplicationController.cs e implementare CLKComplicationDataSource.
  2. Configurare info.plist dell'app per esporre la complicazione e l'identità supportate dalle famiglie di complicazioni.

Questi passaggi sono descritti in modo più dettagliato di seguito.

Classe CLKComplicationDataSource

Il modello C# seguente include i metodi minimi necessari per implementare un oggetto 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)
  {
  }
}

Seguire le istruzioni per la scrittura di complicazioni per aggiungere codice a questa classe.

Info.plist

Il file Info.plist dell'estensione watch deve specificare il nome delle famiglie di CLKComplicationDataSource complicazioni che si desidera supportare:

The complication family types

L'elenco voci Classe origine dati mostrerà i nomi di classe che sottoclasse CLKComplicationDataSource che includono la logica di complicazione.

CLKComplicationDataSource

Tutte le funzionalità di complicazione vengono implementate in una singola classe, sostituendo i metodi della CLKComplicationDataSource classe astratta (che implementa l'interfaccia ICLKComplicationDataSource ).

Metodi obbligatori

Per eseguire la complicazione, è necessario implementare i metodi seguenti:

  • GetPlaceholderTemplate - Restituisce la visualizzazione statica usata durante la configurazione o quando l'app non può fornire un valore.
  • GetCurrentTimelineEntry - Calcolare la visualizzazione corretta quando è in esecuzione la complicazione.
  • GetSupportedTimeTravelDirections- Restituisce opzioni daCLKComplicationTimeTravelDirections, ad esempio None, ForwardBackward, o Forward | Backward.

Riservatezza

Complicazioni che visualizzano dati personali

  • GetPrivacyBehavior - CLKComplicationPrivacyBehavior.ShowOnLockScreen oppure HideOnLockScreen

Se questo metodo restituisce HideOnLockScreen , la complicazione mostrerà un'icona o il nome dell'applicazione (e non dati) quando l'orologio è bloccato.

Aggiornamenti

  • GetNextRequestedUpdateDate - Restituisce un'ora in cui il sistema operativo deve eseguire una query successiva sull'app per i dati di visualizzazione delle complicazioni aggiornati.

È anche possibile forzare un aggiornamento dall'app iOS.

Supporto del tempo di viaggio

Il supporto per viaggi temporali è facoltativo e controllato dal GetSupportedTimeTravelDirections metodo . Se restituisce Forward, Backwardo Forward | Backward è necessario implementare i metodi seguenti

  • GetTimelineStartDate
  • GetTimelineEndDate
  • GetTimelineEntriesBeforeDate
  • GetTimelineEntriesAfterDate

Scrittura di una complicazione

Le complicazioni variano dalla visualizzazione di dati semplici al rendering complesso di immagini e dati con il supporto di Viaggi temporali. Il codice seguente illustra come creare una semplice complicazione a modello singolo.

Codice di esempio

Questo esempio supporta solo il UtilitarianLarge modello, quindi può essere selezionato solo su visi orologio specifici che supportano tale tipo di complicazione. Quando si selezionano complicazioni su un orologio, viene visualizzato MY COMPLICATION e quando viene eseguito visualizza l'ora minuto di testo (con una parte del tempo).

[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);
    }
}

Modelli di complicazione

Esistono diversi modelli disponibili per ogni stile di complicazione. I modelli ring consentono di visualizzare un anello di stato intorno alla complicazione, che può essere usato per visualizzare lo stato di avanzamento o un altro valore graficamente.

Documentazione CLKComplicationTemplate di Apple

Circolare piccola

Questi nomi di classe modello sono tutti preceduti da CLKComplicationTemplateCircularSmall:

  • RingImage : visualizza una singola immagine, con un anello di stato intorno a esso.
  • RingText : visualizza una singola riga di testo, con un anello di stato intorno a esso.
  • SimpleImage : consente di visualizzare solo una piccola immagine.
  • SimpleText : visualizza solo un piccolo frammento di testo.
  • StackImage - Visualizzare un'immagine e una riga di testo, una sopra l'altra
  • StackText : consente di visualizzare due righe di testo.

Modular Small

Questi nomi di classe modello sono tutti preceduti da CLKComplicationTemplateModularSmall:

  • ColumnsText : consente di visualizzare una piccola griglia di valori di testo (2 righe e 2 colonne).
  • RingImage : visualizza una singola immagine, con un anello di stato intorno a esso.
  • RingText : visualizza una singola riga di testo, con un anello di stato intorno a esso.
  • SimpleImage : consente di visualizzare solo una piccola immagine.
  • SimpleText : visualizza solo un piccolo frammento di testo.
  • StackImage - Visualizzare un'immagine e una riga di testo, una sopra l'altra
  • StackText : consente di visualizzare due righe di testo.

Modular Large

Questi nomi di classe modello sono tutti preceduti da CLKComplicationTemplateModularLarge:

  • Colonne : consente di visualizzare una griglia di 3 righe con 2 colonne, inclusa facoltativamente un'immagine a sinistra di ogni riga.
  • StandardBody : consente di visualizzare una stringa di intestazione in grassetto con due righe di testo normale. L'intestazione può facoltativamente visualizzare un'immagine a sinistra.
  • Tabella : visualizza una stringa di intestazione in grassetto, con una griglia di testo 2x2 sotto di essa. L'intestazione può facoltativamente visualizzare un'immagine a sinistra.
  • TallBody : visualizza una stringa di intestazione in grassetto, con una singola riga di testo più grande sotto.

Utilitarian Small

Questi nomi di classe modello sono tutti preceduti da CLKComplicationTemplateUtilitarianSmall:

  • Flat : visualizza un'immagine e un testo su una singola riga (il testo deve essere breve).
  • RingImage : visualizza una singola immagine, con un anello di stato intorno a esso.
  • RingText : visualizza una singola riga di testo, con un anello di stato intorno a esso.
  • Quadrato : visualizzare un'immagine quadrata (rispettivamente 40 px o 44 pixel per Apple Watch da 38 mm o 42 mm).

Utilitarian Large

Esiste un solo modello per questo stile di complicazione: CLKComplicationTemplateUtilitarianLargeFlat. Visualizza una singola immagine e un testo, tutti su una singola riga.