En introduksjon til ClockKit

An Introduksjon til ClockKit
59
Del
to
Del

Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert å bare $ 3. Ikke gå glipp av.

Innledning

På WWDC 2015, Apple annonserte sin første store oppdateringen til Apple Watch programvare, watchOS 2. Denne nye oppdateringen brakte med seg mange nye APIer og funksjoner for utviklere å dra nytte av, inkludert native apps, tilgang til flere av Apple Watch maskinvare, og bedre kommunikasjon med foreldre iOS app.

I denne opplæringen, jeg kommer til å være viser deg hvordan du kan dra nytte av En annen ny funksjon, muligheten til å lage egne ur komplikasjoner ved å ClockKit rammeverket. Denne opplæringen forutsetter at du kjører Xcode 7 på OS X Yosemite (10.10) eller senere.

Hvis du ikke vet allerede, Apple Watch komplikasjoner er de små grensesnittelementer som viser informasjon på urskiven.

Listen Biletet viser hvordan fem komplikasjoner vises på Modular urskiven i tillegg til tiden i øverste høyre hjørne.

1. Sette opp prosjektet

Opprett et nytt prosjekt i Xcode, bruker watchOS > Application > iOS App med WatchKit App mal.

Deretter konfigurerer prosjektet som vist nedenfor, og pass Inkluder komplikasjon er sjekket.

Når Xcode skapte prosjektet, åpner ClockKit Innledning WatchKit Extension i Project Navigator. Du vil se en ny Komplikasjoner Configuration seksjonen som vist nedenfor.

De fem boksene henhold Støttede familier representerer de ulike komplikasjoner familier appen din støtter. I denne opplæringen skal vi fokusere på Modular Stor familie. Du kan fjerne merket de andre avmerkingsboksene for nå.

Som nevnt i Apples watchOS to Transition guide ,
det er svært oppmuntret at appen støtter alle fem familier. Følgende bilde viser hvor disse forskjellige familier blir brukt
Bilde Credit:. Apple watchOS 2 Guide Transition
2. Sette opp komplikasjon

Hvis du vil lære deg hvordan du bruker ClockKit, du kommer til å lage en enkel komplikasjon som viser klokkeslett, navn og sjanger av falske TV-programmer på en bestemt stasjon i løpet av dagen.

For å begynne, åpen ComplicationController.swift i ClockKit Innledning WatchKit Extension mappe. Xcode har automatisk opprettet for deg denne filen. Den inneholder en ComplicationController klasse, som er i samsvar med og implementerer CLKComplicationDataSource protokollen.

De metoder forbundet med denne protokollen er hvordan du gi data til ClockKit om komplikasjoner du ønsker å vise. Metodene i protokollen inneholde et behandlingsprogram som du må ringe for å sende data tilbake til ClockKit.

Tidslinjer

Når gi data til ClockKit, gjør du det i form av en tidslinje. Du gjør dette ved å fylle opp din komplikasjon tidslinje med data objekter som er knyttet til et bestemt tidspunkt. Disse dataobjekter er modellert av CLKComplicationTimelineEntry klassen. Når et bestemt tidspunkt er nådd, ClockKit viser automatisk riktig innhold for programmet.

tidslinjen din oppføringer, hentes og bufres av ClockKit godt før den tid de er ment å bli vist. Dette betyr at dataene må kunne hentes og planlagt på forhånd. Hvert program har et begrenset budsjett på tide å oppdatere innholdet i bakgrunnen. Med andre ord, komplikasjoner er ikke anbefale en erstatning for push-varslinger eller varslingssenteret.

Den store fordelen av å gi data på denne måten er å opprettholde en utmerket brukeropplevelse. Innholdet for hver komplikasjon er umiddelbart tilgjengelig når brukeren hever håndleddet hennes. En av de andre fordelene ved å bruke denne tidslinje datamodell er muligheten til enkelt å ta i bruk den nye Time Travel funksjonen i watchOS 2. Dette er når brukeren slår den digitale krone mens du ser på urskiven og data av komplikasjoner reflekterer tids som har vært reiste for bedriften.

I koden din, under Tidslinje Configuration mark, vil du se fire metodene som kreves for å konfigurere tidslinjen. For å gjøre denne opplæringen enkel og lett å forstå, er vi bare kommer til å støtte fremover tidsreiser og gi data for opp til 24 timer. For å gjøre dette, oppdatert gjennomføringen av de tre første metodene som vist nedenfor
func getSupportedTimeTravelDirectionsForComplication (komplikasjon: CLKComplication, withHandler handler: (CLKComplicationTimeTravelDirections) - > void). {Handler (.forward)} func getTimelineStartDateForComplication (komplikasjon: CLKComplication , withHandler handler: (NSDate?) - > Void) {handler (NSDate ())} func getTimelineEndDateForComplication (komplikasjon: CLKComplication, withHandler handler: (NSDate?) - > Void) {handler (NSDate (timeIntervalSinceNow: (60 * 60 * 24)))}

Den fjerde metoden i tidslinjen Configuration delen, getPrivacyBehaviorForComplication (_: withHandler :), brukes til å angi om du vil at komplikasjon innhold som skal vises når enheten er låst eller ikke. Standardverdien gikk til behandleren, ShowOnLockScreen betyr at dataene alltid vil være synlig

Maler

Bla til bunnen av ComplicationController klassen og finne den getPlaceHolderTemplateForComplication (_:. WithHandler :) metode. I denne metoden, du opprette og bestå en CLKComplicationTemplate tilbake til behandleren for data som du ønsker å vise. I denne opplæringen, skal du bruke CLKComplicationTemplateModularLargeStandardBody mal, som viser tre linjer med tekst. For hver TV-show, er disse tre linjer kommer til å være:

start og sluttid

navn

sjangeren

Det er ganske mange maler tilgjengelig på tvers av de fem komplikasjoner familier. Følgende bilde viser de tilgjengelige malene og fremhever den som vi skal bruke i denne opplæringen
Bilde Credit:. Opprette Komplikasjoner med ClockKit (WWDC 2015)
Tekst Providers

Fordi plass for Innholdet er begrenset på en klokke skjerm, enda mer i de små størrelsene på urskiven komplikasjoner, gi deg tekstbaserte data til ClockKit, bruker CLKTextProvider stedene. Disse leverandørene tar sikte på å unngå avkorting innhold, noe som resulterer i en dårlig brukeropplevelse. Med disse tekstleverandører, beskriver du dine intensjoner om hvilket innhold som skal vises, og deretter ClockKit håndterer den endelige formateringen for deg.

For eksempel, hvis du vil vise en dato i din komplikasjon, bruker du CLKDateTextProvider med angitt dato og sett enheter (måned, dag, time, osv). Det vil riktig formatere dato for den tilgjengelige plassen. Et eksempel på dette ville være å ta date "torsdag 22 oktober" og være i stand til å formatere den til:

tors. 22 oktober

Tors den 22 oktober
< li> okt 22

22

For en komplett liste over tekstleverandører og maler tilgjengelig i ClockKit, kan du se på Apples ClockKit Work Reference.

Nå at du vet om de grunnleggende maler og tekstleverandører, er du klar til å lage en mal for din komplikasjon. I getPlaceHolderTemplateForComplication (_: withHandler :) metoden, legge til følgende kode:
func getPlaceholderTemplateForComplication (komplikasjon: CLKComplication, withHandler handler:? (CLKComplicationTemplate) - > Void) {//Denne metoden vil bli kalt en gang per støttet komplikasjon , og resultatene vil bli lagret utleid mal = CLKComplicationTemplateModularLargeStandardBody () template.headerTextProvider = CLKTimeIntervalTextProvider (startdato: NSDate (), Sluttdato: NSDate (timeIntervalSinceNow: 60 * 60 * 1,5)) template.body1TextProvider = CLKSimpleTextProvider (tekst: "Vis navn" , shortText: "Name") template.body2TextProvider = CLKSimpleTextProvider (tekst: "Show Genre", shortText: null) handler (mal)}

Med denne koden, kan du opprette en Standard Body mal for Modular Stor familie og gi den tre tekstleverandører. De CLKSimpleTextProvider gjenstander bør være grei. Den CLKTimeIntervalTextProvider tar to datoer og formaterer dem til en streng, for eksempel "10:00 til 03:30" eller "1: 00-2: 45 pm".

3. Teste komplikasjon

Nå som vi har konfigurert vår tidslinje og gitt ClockKit med en mal for vår komplikasjonen, kan vi endelig teste ut resultatene av vårt arbeid. I øvre venstre i Xcode vinduet, velg din komplikasjon målet og en av de tilgjengelige simulatorer. Klikk på play-knappen for å bygge og drive din app

Når Apple Watch simulator lanseringer, vil du mest sannsynlig bli presentert med følgende urskiven.

For å teste ut din komplikasjon, trenger du å fullføre noen få trinn.

Trinn 1

Trykk Command + Shift + 2 for å simulere en kraft touch og klikk på urskiven.

Trinn 2
< p> Trykk Command + Shift + 1, sveip til høyre til Modular ansiktet og klikk på Tilpass-knappen.

Trinn 3

Sveip til høyre, trykk på midten komplikasjon, og rull til bunnen, for å bruke styreflaten eller musen simulere digitale krone.

Trinn 4

Simuler en kraft kontakt igjen for å komme tilbake til urskiven chooser og velg Modular ansiktet.

Gratulerer. Du har nettopp fått deg aller første ClockKit komplikasjon til å dukke opp på en Apple Watch urskiven. Nå er det tid for deg å begynne å fylle den ut med noen faktiske (falske) data.

4. Gi data til ClockKit

Før vi skaper noen tidslinje oppføringer for vår komplikasjon, er vi først skal lage en Show struct for enkelt å modellere våre data og deretter skape verdier av denne nye typen. Legg inn følgende kode til ComplicationController.swift, før starten av ComplicationController klassen definisjonen
struct Show {var navn. String Var kortnavn: String? Var genre: String Var Startdato: NSDate Var Lengde: NSTimeInterval} la time: NSTimeInterval = 60 * 60let viser = [Show (navn: "Into the Wild", kortnavn: "Into Wild", genre: "Dokumentar", startdato: NSDate (), lengde: time * 1,5), Show (navn: "24/7", kortnavn: null, genre: "Drama", startdato: NSDate (timeIntervalSinceNow: time * 1,5), lengde: time), Show (navn: "Hvordan bli rik", kortnavn: "Bli rik", genre: "Dokumentar", startdato: NSDate (timeIntervalSinceNow: time * 2,5), lengde: time * 3), Show (navn: "NET Daily", kortnavn: null , genre: "Nyheter", startdato: NSDate (timeIntervalSinceNow: time * 5,5), lengde: time)]

Som du ser, skaper vi Show struktur og skape en statisk array som inneholder fire show. Du vil bruke denne matrisen som komplikasjon datakilde

I ComplicationController klassen, finn getCurrentTimelineEntryForComplication (_:. WithHandler :) metode og legge til følgende kode i det:
func getCurrentTimelineEntryForComplication (komplikasjon: CLKComplication, withHandler handler: ((CLKComplicationTimelineEntry) - > Void?)) {//Ring handler med gjeldende tidslinje oppføring la vis = viser [0] la mal = CLKComplicationTemplateModularLargeStandardBody () template.headerTextProvider = CLKTimeIntervalTextProvider (startdato: show.startDate, Sluttdato: NSDate (tidsintervall: show.length, sinceDate: show.startDate)) template.body1TextProvider = CLKSimpleTextProvider (tekst: show.name, shortText: show.shortName) template.body2TextProvider = CLKSimpleTextProvider (tekst: show.genre, shortText: null ) la entry = CLKComplicationTimelineEntry (dato: NSDate (tidsintervall: time * -0,25, sinceDate: show.startDate), complicationTemplate: mal) handler (entry)}

Du først opprette en komplikasjon mal, akkurat som du gjorde før, og fylle det med innhold. Du kan deretter opprette en CLKComplicationTimelineEntry objekt med to parametre:

en dato

en mal

Datoen du angir her, er hvor denne oppføringen vil bli plassert på tidslinjen og vist til brukeren. For vår app, vi gir vår tidslinje entry en dato for femten minutter før showet skal starte, slik at det vil dukke opp på brukerens klokken like før showet er på.

Deretter må du gi ClockKit med alle de andre programmene du har opprettet for din komplikasjon. Dette gjøres i getTimelineEntriesForComplication (_: afterDate: grense: withHandler :) metode. Grensen parameter i denne metoden er det slik at en enkelt søknad ikke kan overbelaste ClockKit cache med data og vet nøyaktig hvor mange tidslinjen oppføringer det er behov for å gi

Legg til følgende kode i getTimelineEntriesForComplication (_.: afterDate: grense: withHandler :) metode i ComplicationController.swift:
func getTimelineEntriesForComplication (komplikasjon: CLKComplication, afterDate dato: NSDate, grense: Int, withHandler handler: (([CLKComplicationTimelineEntry]) - > Void)) {//ring føreren med tidslinje oppføringer etter de gitte datoen Var oppføringer: [CLKComplicationTimelineEntry] = [] for show i show {hvis entries.count < grense & & show.startDate.timeIntervalSinceDate (dato) > 0 {la mal = CLKComplicationTemplateModularLargeStandardBody () template.headerTextProvider = CLKTimeIntervalTextProvider (startdato: show.startDate, Sluttdato: NSDate (tidsintervall: show.length, sinceDate: show.startDate)) template.body1TextProvider = CLKSimpleTextProvider (tekst: show.name, shortText : show.shortName) template.body2TextProvider = CLKSimpleTextProvider (tekst: show.genre, shortText: null) la entry = CLKComplicationTimelineEntry (dato: NSDate (tidsintervall: time * -0,25, sinceDate: show.startDate), complicationTemplate: mal) oppføringer. føye (inngang)}} Gafler (oppføringer)}

Du først opprette en tom rekke CLKComplicationTimelineEntry stedene. Deretter iterere gjennom programmene du opprettet tidligere. For hvert show, hvis det begynner etter datoen levert av ClockKit og grensen for oppføringer er ikke overskredet, så du lage en mal og legge dette til array.

På slutten av denne metoden, du ring handler med array. Passerer nil eller en tom array til behandleren vil fortelle ClockKit at du ikke har flere data for å gi, og det vil slutte å spørre din CLKComplicationDataSource objekt til mer data er nødvendig.

Med disse metodene på plass, er du nå klar å se det ferdige komplikasjon. Klikk på play-knappen for å bygge og drive din app. Når simulatoren første lanseringene, vil du se din komplikasjon som viser data for den første show som du opprettet.

Hvis du blar deretter med styreflaten eller musen for å angi Time Travel-modus, vil du se at den andre viser Du skapte vises ved din komplikasjon på riktig tidspunkt.

Konklusjon

I denne opplæringen, lært deg de grunnleggende av ClockKit rammeverket og hvordan du oppretter en tilpasset urskiven komplikasjon for Apple Watch. Dette inkluderte de fem komplikasjoner familier, grunnleggende maler og tekstleverandører, og tidslinje-basert data.

I din komplikasjon, du også innebygd støtte for watchOS to tidsreiser funksjonen og legge inn nye data som tiden går. Som alltid, hvis du har noen kommentarer eller spørsmål, la dem i kommentarfeltet nedenfor.