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:
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:
Vorhandene Projekte
So fügen Sie einem vorhandenen Projekt eine Komplikation hinzu:
- Erstellen Sie eine neue ComplicationController.cs-Klassendatei , und implementieren Sie
CLKComplicationDataSource
. - 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 CLKComplicationDataSource
zu 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:
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 wieCLKComplicationTimeTravelDirections
None
,Forward
,Backward
oderForward | Backward
zurück.
Datenschutz
Komplikationen bei der Anzeige personenbezogener Daten
-
GetPrivacyBehavior
-CLKComplicationPrivacyBehavior.ShowOnLockScreen
oderHideOnLockScreen
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 , Backward
oder Forward | Backward
zurückgegeben Forward
wird, 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.