Auf der WWDC 2015 kündigte Apple das erste große Update der Apple Watch-Software an, watchOS 2. Dieses neue Update brachte viele neue APIs und Funktionen mit, die Entwickler nutzen können, darunter native Apps, Zugriff auf weitere Hardware der Apple Watch und eine bessere Kommunikation mit der übergeordneten iOS-App.
In diesem Tutorial werde ich Ihnen zeigen, wie Sie eine weitere neue Funktion nutzen können, nämlich die Möglichkeit, mit dem ClockKit-Framework benutzerdefinierte Uhrenkomplikationen zu erstellen. Dieses Tutorial setzt voraus, dass Sie ausgeführt werden Xcode 7 auf OS X Yosemite (10.10) oder später.
Wenn Sie es noch nicht wissen, sind Komplikationen bei der Apple Watch die kleinen Elemente der Benutzeroberfläche, die Informationen auf dem Zifferblatt anzeigen.
Der obige Screenshot zeigt, wie fünf Komplikationen auf der angezeigt werden Modular Zifferblatt zusätzlich zur Uhrzeit in der oberen rechten Ecke.
Erstellen Sie ein neues Projekt in Xcode mit der watchOS> Anwendung> iOS App mit WatchKit App Vorlage.
Konfigurieren Sie als Nächstes das Projekt wie unten gezeigt, und stellen Sie sicher, dass Komplikation einschließen wird geprüft.
Nachdem Xcode Ihr Projekt erstellt hat, öffnen Sie die ClockKit Einführung WatchKit Extension in dem Projektnavigator. Sie werden ein neues sehen Komplikationen Konfiguration Abschnitt wie unten gezeigt.
Die fünf Checkboxen unter Unterstützte Familien die verschiedenen Komplikationsfamilien darstellen, die von Ihrer App unterstützt werden. In diesem Tutorial konzentrieren wir uns auf die Modular groß Familie. Sie können jetzt die anderen Kontrollkästchen deaktivieren.
Wie in Apple angegeben watchOS 2 Transition Guide, Es wird dringend empfohlen, dass Ihre App alle fünf Familien unterstützt. Das folgende Bild zeigt, wo diese verschiedenen Familien verwendet werden.
Bildnachweis: Apple watchOS 2 Transition GuideUm Ihnen beizubringen, wie Sie ClockKit verwenden, erstellen Sie eine einfache Komplikation, die die Uhrzeit, den Namen und das Genre gefälschter Fernsehsendungen eines bestimmten Senders im Laufe des Tages anzeigt.
Um zu beginnen, öffnen Sie sich ComplicationController.swift in dem ClockKit Einführung WatchKit Extension Mappe. Xcode hat diese Datei automatisch für Sie erstellt. Es enthält eine ComplicationController
Klasse, die dem entspricht und das implementiert CLKComplicationDataSource
Protokoll.
Die mit diesem Protokoll verknüpften Methoden geben an, wie Sie ClockKit Daten zu den Komplikationen bereitstellen, die Sie anzeigen möchten. Die Protokollmethoden enthalten einen Handler, den Sie aufrufen müssen, um Daten an ClockKit zurückzugeben.
Wenn Sie ClockKit Daten zur Verfügung stellen, tun Sie dies in Form einer Zeitleiste. Sie tun dies, indem Sie die Zeitleiste Ihrer Komplikation mit Datenobjekten füllen, die mit einem bestimmten Zeitpunkt verknüpft sind. Diese Datenobjekte werden durch die modelliert CLKComplicationTimelineEntry
Klasse. Wenn ein bestimmter Zeitpunkt erreicht ist, zeigt ClockKit automatisch den richtigen Inhalt für Ihre App an.
Ihre Timeline-Einträge werden von ClockKit rechtzeitig vor dem Zeitpunkt abgerufen und zwischengespeichert, zu dem sie angezeigt werden sollen. Dies bedeutet, dass die Daten abgerufen und im Voraus geplant werden können. Jede Anwendung hat ein begrenztes Zeitfenster, um ihren Inhalt im Hintergrund zu aktualisieren. In anderen Worten, Komplikationen sind nicht ein Ersatz für Push-Benachrichtigungen oder das Benachrichtigungscenter.
Der Hauptvorteil der Bereitstellung von Daten auf diese Weise ist die Aufrechterhaltung einer ausgezeichneten Benutzererfahrung. Der Inhalt für jede Komplikation ist sofort verfügbar, wenn der Benutzer das Handgelenk hebt. Ein weiterer Vorteil der Verwendung dieses Timeline-Datenmodells ist die einfache Übernahme des neuen Modells Zeitreise Funktion in watchOS 2. Dies ist der Fall, wenn der Benutzer die digitale Krone dreht, während er auf das Zifferblatt schaut, und die Daten der Komplikationen geben die bisherige Zeit wieder gereist nach.
In Ihrem Code unter der Timeline-Konfiguration Wenn Sie diese Option markieren, werden vier Methoden angezeigt, die zum Konfigurieren der Zeitleiste erforderlich sind. Um dieses Tutorial einfach und verständlich zu machen, unterstützen wir nur Vorwärtszeitreisen und stellen Daten für bis zu 24 Stunden zur Verfügung. Aktualisieren Sie dazu die Implementierung der ersten drei Methoden (siehe unten).
func getSachortedTimeTravelDirectionsForComplication (Komplikation: CLKComplication, mit Handler-Handler: (CLKComplicationTimeTravelDirections) -> Void) Handler (.Forward) func getTimelineEndDateForComplication (Komplikation: CLKComplication, withHandler-Handler: (NSDate?) -> Void) Handler (NSDate (timeIntervalSinceNow: (60 * 60 * 24)))
Die vierte Methode in der Timeline-Konfiguration Sektion, getPrivacyBehaviorForComplication (_: withHandler :)
, wird verwendet, um anzugeben, ob der Inhalt Ihrer Komplikation angezeigt werden soll, wenn das Gerät gesperrt ist oder nicht. Der Standardwert, der an den Handler übergeben wurde, ShowOnLockScreen
, bedeutet, dass die Daten immer sichtbar sind.
Scrollen Sie zum unteren Rand des ComplicationController
Klasse und finde die getPlaceHolderTemplateForComplication (_: withHandler :)
Methode. In dieser Methode erstellen und übergeben Sie a CLKComplicationTemplate
zurück zum Handler für die Daten, die Sie anzeigen möchten. In diesem Tutorial verwenden Sie die CLKComplicationTemplateModularLargeStandardBody
Vorlage, die drei Textzeilen anzeigt. Für jede Fernsehsendung werden diese drei Zeilen lauten:
In den fünf Komplikationsfamilien sind zahlreiche Vorlagen verfügbar. Das folgende Bild zeigt die verfügbaren Vorlagen und hebt die Vorlage hervor, die wir in diesem Lernprogramm verwenden werden.
Bildnachweis: Erstellen von Komplikationen mit ClockKit (WWDC 2015)Da der Platz für Inhalte auf einer Uhrenanzeige begrenzt ist, insbesondere bei kleinen Größen von Zifferblattkomplikationen, stellen Sie ClockKit textbasierte Daten zur Verfügung CLKTextProvider
Objekte. Diese Anbieter bemühen sich, das Abschneiden von Inhalten zu vermeiden, was zu einer schlechten Benutzererfahrung führt. Mit diesen Textanbietern beschreiben Sie Ihre Absichten hinsichtlich des Inhalts, den Sie anzeigen möchten, und ClockKit übernimmt dann die endgültige Formatierung für Sie.
Wenn Sie beispielsweise ein Datum in Ihrer Komplikation anzeigen möchten, verwenden Sie das CLKDateTextProvider
mit einem bestimmten Datum und einer bestimmten Anzahl von Einheiten (Monat, Tag, Stunde usw.). Dadurch wird das Datum für den verfügbaren Speicherplatz korrekt formatiert. Ein Beispiel dafür wäre das Datum "Donnerstag, 22. Oktober" und in der Lage zu sein, es wie folgt zu formatieren:
Eine vollständige Liste der in ClockKit verfügbaren Textanbieter und -vorlagen finden Sie in der ClockKit Framework Reference von Apple.
Nachdem Sie nun die grundlegenden Vorlagen und Textanbieter kennen, können Sie eine Vorlage für Ihre Komplikation erstellen. In dem getPlaceHolderTemplateForComplication (_: withHandler :)
fügen Sie den folgenden Code hinzu:
func getPlaceholderTemplateForComplication (Komplikation: CLKComplication, withHandler-Handler: (CLKComplicationTemplate?) -> Void) // Diese Methode wird einmal pro unterstützter Komplikation aufgerufen und die Ergebnisse werden zwischengespeichert : NSDate (), endDate: NSDate (timeIntervalSinceNow: 60 * 60 * 1.5)) template.body1TextProvider = CLKSimpleTextProvider (Text: "Name anzeigen", shortText: "Name") template.body2TextProvider = CLKSimpleTextProvider (Text: "Show Genre") shortText: nil) Handler (Vorlage)
Mit diesem Code erstellen Sie eine Standard Körper Vorlage für die Modular groß Familie und geben Sie drei Textanbieter. Das CLKSimpleTextProvider
Objekte sollten unkompliziert sein. Das CLKTimeIntervalTextProvider
nimmt zwei Datumsangaben und formatiert sie in eine Zeichenfolge, z. B. "10:00 AM - 03:30 PM" oder "1: 00-2: 45PM".
Nachdem wir nun unsere Zeitleiste konfiguriert und ClockKit eine Vorlage für unsere Komplikation bereitgestellt haben, können wir nun die Ergebnisse unserer Arbeit testen. Wählen Sie oben links in Ihrem Xcode-Fenster Ihr Komplikationsziel und einen der verfügbaren Simulatoren aus. Klicken Sie auf die Wiedergabeschaltfläche, um Ihre App zu erstellen und auszuführen.
Wenn der Apple Watch-Simulator gestartet wird, wird höchstwahrscheinlich das folgende Zifferblatt angezeigt:
Um Ihre Komplikation zu testen, müssen Sie einige Schritte ausführen.
Drücken Sie Befehl + Umschalttaste + 2 simulieren Sie eine gewaltsame Berührung und klicken Sie auf das Zifferblatt.
Drücken Sie Befehl + Umschalttaste + 1, nach rechts wischen Modular Gesicht und klicken Sie auf die Anpassen Taste.
Wischen Sie nach rechts, tippen Sie auf die mittlere Komplikation und scrollen Sie mit Ihrem Trackpad oder Ihrer Maus nach unten, um die digitale Krone zu simulieren.
Simulieren Sie erneut eine gewaltsame Berührung, um zur Anzeige des Zifferblattes zurückzukehren und wählen Sie die Option Modular Gesicht.
Herzliche Glückwünsche. Sie haben gerade die erste ClockKit-Komplikation erhalten, die auf einer Apple Watch-Uhr erscheint. Nun ist es Zeit für Sie, es mit einigen (falschen) Daten auszufüllen.
Bevor wir Zeiteinträge für unsere Komplikation erstellen, erstellen wir zuerst eine Show
struct, um unsere Daten einfach zu modellieren und Werte dieses neuen Typs zu erstellen. Fügen Sie das folgende Code-Snippet zu hinzu ComplicationController.swift, vor dem Start des ComplicationController
Klassendefinition.
struct Show Variablenname: String Variablenname: String? var genre: String var startDate: NSDate var Länge: NSTimeInterval let hour: NSTimeInterval = 60 * 60 let shows = [Show (Name: "Into the Wild"), shortName: "Into Wild", Genre: "Documentary", startDate: NSDate (), Länge: Stunde * 1.5, Show (Name: "24/7", Kurzname: Null, Genre: "Drama", StartDate: NSDate (TimeIntervalSinceNow: Stunde * 1.5), Länge: Stunde), Show (Name.) : "Wie werde ich reich", shortName: "Werde reich", Genre: "Documentary", startDate: NSDate (timeIntervalSinceNow: hour * 2.5), Länge: hour * 3), Show (Name: "NET Daily", shortName: null, Genre: "News", startDate: NSDate (timeIntervalSinceNow: hour * 5.5), length: hour)]
Wie Sie sehen, erstellen wir das Show
strukturieren und erstellen Sie ein statisches Array, das vier Shows enthält. Sie verwenden dieses Array als Datenquelle Ihrer Komplikation.
In dem ComplicationController
Klasse, finde die getCurrentTimelineEntryForComplication (_: withHandler :)
Methode und fügen Sie den folgenden Code hinzu:
func getCakeTimelineEntryForComplication (Komplikation: CLKComplication, withHandler-Handler: ((CLKComplicationTimelineEntry?) -> Void)) // Rufen Sie den Handler mit dem aktuellen Zeitleisteneintrag ein. startDate: show.startDate, endDate: NSDate (timeInterval: show.length, sinceDate: show.startDate)) template.body1TextProvider = CLKSimpleTextProvider (Text: show.name, shortText: show.shortName) template.body2TextProvider = CLKSimaTextProvider: .genre, shortText: nil) let entry = CLKComplicationTimelineEntry (Datum: NSDate (timeInterval: hour * -0.25, seitDate: show.startDate), complicationTemplate: template) Handler (entry)
Sie erstellen zunächst wie zuvor eine Komplikationsvorlage und füllen diese mit Inhalt. Sie erstellen dann eine CLKComplicationTimelineEntry
Objekt mit zwei Parametern:
Das Datum, das Sie hier angeben, ist der Ort, an dem dieser Eintrag auf der Timeline positioniert und dem Benutzer angezeigt wird. Für unsere App geben wir unserem Zeitplaneintrag ein Datum von fünfzehn Minuten vor Beginn der Show, damit er auf der Uhr des Benutzers angezeigt wird, kurz bevor die Show läuft.
Als Nächstes müssen Sie ClockKit mit allen anderen Shows, die Sie für Ihre Komplikation erstellt haben, zur Verfügung stellen. Dies geschieht im getTimelineEntriesForComplication (_: afterDate: limit: withHandler :)
Methode. Der limit-Parameter in dieser Methode ist so, dass eine einzelne Anwendung den ClockKit-Cache nicht mit Daten überladen kann und genau weiß, wie viele Timeline-Einträge bereitgestellt werden müssen.
Fügen Sie dem folgenden Code hinzu getTimelineEntriesForComplication (_: afterDate: limit: withHandler :)
Methode in ComplicationController.swift:
func getTimelineEntriesForComplication (Komplikation: CLKComplication, afterDatum: NSDate, Limit: Int, withHandler-Handler: (([CLKComplicationTimelineEntry]?) -> Void)) // Ruft den Handler mit den Timeline-Einträgen nach den angegebenen var-Einträgen auf: [ CLKComplicationTimelineEntry] = [] für show in shows if entries.count < limit && show.startDate.timeIntervalSinceDate(date) > 0 lass aile = CLKComplicationTemplateModularLargeStandardBody () template.headerTextProvider = CLKTimeIntervalTextProvider (startDate: show.startDate, endDate: NSDate (timeInterval: show.length, sinceDate: show.startDate)) : show.shortName) template.body2TextProvider = CLKSimpleTextProvider (Text: show.genre, shortText: nil) let entry = CLKComplicationTimelineEntry (Datum: NSDate (timeInterval: hour * -0.25, sinceDate: show.startDate), ComplicationTemplate). Anhängen (Eintrag) Handler (Einträge)
Sie erstellen zuerst ein leeres Array von CLKComplicationTimelineEntry
Objekte. Sie durchlaufen dann die zuvor erstellten Shows. Wenn es für jede Show nach dem von ClockKit angegebenen Datum startet und die Anzahl der Einträge nicht überschritten wurde, erstellen Sie eine Vorlage und hängen diese an das Array an.
Am Ende dieser Methode rufen Sie den Handler mit Ihrem Array auf. Vorbeigehen Null
oder ein leeres Array für den Handler teilt ClockKit mit, dass Sie keine weiteren Daten zur Verfügung stellen müssen, und fragt ab CLKComplicationDataSource
Objekt, bis weitere Daten benötigt werden.
Mit diesen Methoden können Sie nun Ihre abgeschlossene Komplikation abrufen. Klicken Sie auf die Wiedergabeschaltfläche, um Ihre App zu erstellen und auszuführen. Wenn der Simulator zum ersten Mal gestartet wird, werden die Daten für die erste von Ihnen erstellte Show angezeigt.
Wenn Sie dann mit Ihrem Trackpad oder Ihrer Maus zum Time-Travel-Modus blättern, werden die anderen von Ihnen erstellten Shows zum richtigen Zeitpunkt von Ihrer Komplikation angezeigt.
In diesem Lernprogramm haben Sie die Grundlagen des ClockKit-Frameworks kennen gelernt und erfahren, wie Sie eine benutzerdefinierte Zifferblattkomplikation für die Apple Watch erstellen. Dazu gehörten die fünf Komplikationsfamilien, grundlegende Vorlagen und Textanbieter sowie Zeitleisten-basierte Daten.
In Ihrer Komplikation unterstützen Sie auch die Funktion watchOS 2 Time Travel und fügen im Laufe der Zeit neue Daten hinzu. Wenn Sie Kommentare oder Fragen haben, lassen Sie sie wie folgt in den Kommentaren.