Teilen über


watchOS-Komplikationen in Xamarin

watchOS ermöglicht Entwicklern das Schreiben benutzerdefinierter Komplikationen für watch Gesichter

Auf dieser Seite werden die verschiedenen Arten von Komplikationen erläutert, die verfügbar sind, und wie Sie Ihrer watchOS 3-App eine Komplikation hinzufügen.

Beachten Sie, dass jede watchOS-Anwendung nur eine Komplikation aufweisen kann.

Lesen Sie zunächst die Apple-Dokumentation, um zu ermitteln, ob Ihre App für eine Komplikation geeignet ist. Es stehen fünf CLKComplicationFamily Arten von Anzeige zur Auswahl:

Die 5 verfügbaren CLKComplicationFamily-Typen: Circular Small, Modular Small, Modular Large, Utilitarian Small, Utilitarian Large

Apps können je nach angezeigten Daten nur einen Stil oder alle fünf implementieren. Sie können auch Time Travel unterstützen, indem Sie Werte für vergangene und/oder zukünftige Zeiten angeben, wenn der Benutzer die Digitale Krone dreht.

Hinzufügen einer Komplikation

Konfiguration

Komplikationen können während der Erstellung einer watch-App oder manuell zu einer vorhandenen Lösung hinzugefügt werden.

Neues Projekt hinzufügen...

Der Assistent zum Hinzufügen eines neuen Projekts... enthält ein Kontrollkästchen, das automatisch eine Komplikationscontrollerklasse erstellt und die Datei Info.plist konfiguriert:

Das Kontrollkästchen Komplikation einschließen

Vorhandene Projekte

So fügen Sie einem vorhandenen Projekt eine Komplikation hinzu:

  1. Erstellen Sie eine neue ComplicationController.cs-Klassendatei , und implementieren Sie CLKComplicationDataSource.
  2. Konfigurieren Sie die Info.plist der App, um die Komplikation aufzudecken und anzugeben, welche Komplikationsfamilien unterstützt werden.

Diese Schritte werden unten ausführlicher beschrieben.

CLKComplicationDataSource-Klasse

Die folgende C#-Vorlage enthält die mindestens erforderlichen Methoden, um eine CLKComplicationDataSourcezu implementieren.

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

Befolgen Sie die Anweisungen zum Schreiben einer Komplikation , um dieser Klasse Code hinzuzufügen.

Info.plist

Die Datei Info.plist der watch-Erweiterung sollte den Namen der Und die Komplikationsfamilien angeben, die CLKComplicationDataSource Sie unterstützen möchten:

Die Komplikationsfamilientypen

In der Eintragsliste Datenquellenklasse werden Klassennamen der Unterklasse CLKComplicationDataSource angezeigt, die Ihre Komplikationslogik enthält.

CLKComplicationDataSource

Alle Komplikationsfunktionen werden in einer einzelnen Klasse implementiert, wobei Methoden aus der CLKComplicationDataSource abstrakten Klasse überschrieben werden (die die ICLKComplicationDataSource -Schnittstelle implementiert).

Erforderliche Methoden

Sie müssen die folgenden Methoden implementieren, damit die Komplikation ausgeführt werden kann:

  • GetPlaceholderTemplate – Gibt die statische Anzeige zurück, die während der Konfiguration verwendet wird oder wenn die App keinen Wert bereitstellen kann.
  • GetCurrentTimelineEntry – Berechnen Sie die richtige Anzeige, wenn die Komplikation ausgeführt wird.
  • GetSupportedTimeTravelDirections : Gibt Optionen wie CLKComplicationTimeTravelDirectionsNone, Forward, Backwardoder Forward | Backwardzurück.

Datenschutz

Komplikationen bei der Anzeige personenbezogener Daten

  • GetPrivacyBehavior - CLKComplicationPrivacyBehavior.ShowOnLockScreen oder HideOnLockScreen

Wenn diese Methode zurückgibtHideOnLockScreen, zeigt die Komplikation entweder ein Symbol oder den Anwendungsnamen (und keine Daten) an, wenn die watch gesperrt ist.

Updates

  • GetNextRequestedUpdateDate – Gibt einen Zeitpunkt zurück, zu dem das Betriebssystem die App als nächstes nach aktualisierten Daten zur Anzeige von Komplikationen abfragen soll.

Sie können auch ein Update über Ihre iOS-App erzwingen.

Unterstützung von Zeitreisen

Die Unterstützung für Zeitreisen ist optional und wird von der GetSupportedTimeTravelDirections -Methode gesteuert. Wenn , Backwardoder Forward | Backward zurückgegeben Forwardwird, müssen Sie die folgenden Methoden implementieren:

  • GetTimelineStartDate
  • GetTimelineEndDate
  • GetTimelineEntriesBeforeDate
  • GetTimelineEntriesAfterDate

Schreiben einer Komplikation

Komplikationen reichen von der einfachen Datenanzeige bis hin zu komplizierten Bild- und Datenrenderings mit Time Travel-Unterstützung. Der folgende Code zeigt, wie Sie eine einfache Komplikation mit einer einzelnen Vorlage erstellen.

Beispielcode

Dieses Beispiel unterstützt nur die UtilitarianLarge Vorlage. Daher kann nur für bestimmte watch Gesichter ausgewählt werden, die diese Art von Komplikation unterstützen. Bei der Auswahl von Komplikationen auf einem watch wird MY COMPLICATION angezeigt, und bei der Ausführung wird der Text MINUTE Hour (mit einem Teil der Zeit) angezeigt.

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

Komplikationsvorlagen

Für jeden Komplikationsstil stehen verschiedene Vorlagen zur Verfügung. Mit den Ringvorlagen können Sie einen Statusring um die Komplikation anzeigen, der zum grafischen Anzeigen des Fortschritts oder eines anderen Werts verwendet werden kann.

ClKComplicationTemplate-Dokumentation von Apple

Kreisförmig klein

Diesen Vorlagenklassennamen wird das Präfix vorangestellt CLKComplicationTemplateCircularSmall:

  • RingImage : Zeigt ein einzelnes Bild mit einem Statusring an.
  • RingText : Zeigt eine einzelne Textzeile mit einem Statusring um sie herum an.
  • SimpleImage : Zeigen Sie einfach ein kleines einzelnes Bild an.
  • SimpleText : Zeigen Sie einfach einen kleinen Textausschnitt an.
  • StackImage : Anzeigen eines Bilds und einer Textzeile übereinander
  • StackText : Zeigt zwei Textzeilen an.

Modular Small

Diesen Vorlagenklassennamen wird das Präfix vorangestellt CLKComplicationTemplateModularSmall:

  • ColumnsText : Zeigt ein kleines Raster mit Textwerten (2 Zeilen und 2 Spalten) an.
  • RingImage : Zeigt ein einzelnes Bild mit einem Statusring an.
  • RingText : Zeigt eine einzelne Textzeile mit einem Statusring um sie herum an.
  • SimpleImage : Zeigen Sie einfach ein kleines einzelnes Bild an.
  • SimpleText : Zeigen Sie einfach einen kleinen Textausschnitt an.
  • StackImage : Anzeigen eines Bilds und einer Textzeile übereinander
  • StackText : Zeigt zwei Textzeilen an.

Modular Groß

Diesen Vorlagenklassennamen wird das Präfix vorangestellt CLKComplicationTemplateModularLarge:

  • Spalten : Zeigt ein Raster von 3 Zeilen mit 2 Spalten an, optional mit einem Bild links von jeder Zeile.
  • StandardBody : Zeigt eine fett formatierte Kopfzeilenzeichenfolge mit zwei Nur-Text-Zeilen an. Der Header kann optional ein Bild auf der linken Seite anzeigen.
  • Tabelle : Zeigt eine fett formatierte Kopfzeilenzeichenfolge mit einem 2x2-Raster mit Text darunter an. Der Header kann optional ein Bild auf der linken Seite anzeigen.
  • TallBody : Zeigt eine fett formatierte Kopfzeilenzeichenfolge mit einer größeren Schriftart an, darunter eine einzelne Textzeile.

Utilitarian Small

Diesen Vorlagenklassennamen wird das Präfix vorangestellt CLKComplicationTemplateUtilitarianSmall:

  • Flach : Zeigt ein Bild und Text in einer einzelnen Zeile an (der Text sollte kurz sein).
  • RingImage : Zeigt ein einzelnes Bild mit einem Statusring an.
  • RingText : Zeigt eine einzelne Textzeile mit einem Statusring um sie herum an.
  • Quadrat: Zeigt ein quadratisches Bild (40px oder 44px quadratisch für die 38mm bzw. 42mm Apple Watch) an.

Utilitarian Large

Es gibt nur eine Vorlage für diesen Komplikationsstil: CLKComplicationTemplateUtilitarianLargeFlat. Es zeigt ein einzelnes Bild und einen Text in einer einzigen Zeile an.