I år på WWDC avslöjade Apple officiellt watchOS 3, deras senaste uppdatering till Apple Watchs kärnprogramvara. Medan det bara fanns några "headline" -funktioner som visas, öppnar watchOS 3 många API-apparater för utvecklare för att skapa ännu mer funktionella watchOS-appar. Många av dessa API har varit tillgängliga på iOS i flera år och har nu lagts till i watchOS, inklusive CloudKit, SpriteKit och SceneKit.
I den här handledningen visar jag dig hur du kan använda alla dessa nya API i dina watchOS 3-program. Jag ska också visa dig några av de viktigaste tilläggen till befintliga watchOS-ramar.
Denna handledning kräver att du kör Xcode 8 på MacOS 10.11 eller senare. Det förutsätter också att du är bekväm med grunderna i WatchKit och utvecklar watchOS-appar. Om du inte är så rekommenderar jag att du checkar ut några av följande handledning som täcker grunderna i WatchKit:
Du måste också ladda ner startprojektet från GitHub.
Två av de största tilläggen till watchOS 3 för utvecklare är SpriteKit och SceneKit-ramarna. Dessa ramverk ger både 2D- och 3D-grafik i Apple Watch-applikationer. Du kan visa scener i dina appar med hjälp av det nya WKInterfaceSCNScene
och WKInterfaceSKScene
gränssnittsobjekt, vilka båda är underklasser av WKInterfaceObject
. På samma sätt som SCNView
och SKView
På IOS erbjuder dessa gränssnittsobjekt egenskaper och metoder för att manipulera dina scener, inklusive spel / pausfunktion samt standardbelysning.
Öppna startprojektet och öppna upp Interface.storyboard fil. Du kommer att se att i den här filen har jag redan skapat några grundläggande gränssnitt för dig. För den här delen av handledningen är vi bara intresserade av den översta gränssnittskontrollen med en enda knapp. Gå till Objektbibliotek i nedre högra hörnet av Xcode och dra i en SceneKit Scene föremål ovanför Spela upp / pausa knapp:
Öppna sedan upp attribut Inspektör och tilldela scenfilen (Scene.scn) ingår i projektet till Scen egenskapen för detta gränssnittsobjekt:
För att arbeta med detta i vår kod öppnar du SceneKitInterfaceController.swift fil i Assistentredaktör och skapa och länka ett utlopp som heter sceneItem
för ditt gränssnittsobjekt:
@IBOutlet var scenItem: WKInterfaceSCNScene!
Observera att för att ditt SceneKit-innehåll ska kunna fungera korrekt, ska du måste länka gränsobjektet i ditt storyboard med en IBOutlet
i din kod. Vid skrivning av denna handledning nämns det inte någonstans i Apples dokumentation, men denna inställning är nödvändig.
Slutligen, för att genomföra spel / pausfunktionaliteten hos vår knapp, ersätt den befintliga didPress (knapp :)
metod med följande:
@IBAction func didPress () om släppt paus = sceneItem.scene? .IsPaused sceneItem? .Scene? .IsPaused =! Pausat
Bygg och kör din app och du kommer att se en röd kubsspinnning på skärmen:
Tryck på Play / Pause knappen bör sluta och starta animeringen av din scen efter behov.
Medan vi bara täckte visning av SceneKit-innehåll i denna handledning, lägger vi till stöd för SpriteKit mycket liknande. Den enda stora skillnaden är att SpriteKit-tillgångar måste användas med a WKInterfaceSKScene
objekt snarare än a WKInterfaceSCNScene
föremål för SceneKit.
Ett annat tillägg med iOS 10 och watchOS 3 är UserNotifications-ramverket. Denna ram tillhandahåller ett enkelt sätt att arbeta med både lokala och fjärranslutna meddelanden som skickas och levereras av din ansökan.
Om du vill lära dig mer om denna ram, kolla in min handledning som täcker den här:
Observera att inte alla API: er i UserNotifications-ramverket på iOS är tillgängliga i watchOS. De som är närvarande fungerar dock identiskt på watchOS och iOS.
Ett annat viktigt tillägg i watchOS 3 är tillgången till ramar som tidigare endast fanns på andra Apple-plattformar, inklusive CloudKit, GameKit, CoreAudio och AVFoundation.
Medan den fullständiga uppsättningen API-filer från dessa ramar inte är tillgängliga i watchOS kan de klasser och metoder som kan användas i Apple Watch-apparater fungera identiskt med deras iOS- och macOS-motsvarigheter.
Förutom att lägga till många nya ramar, leder watchOS 3 också många ändringar till befintliga ramar, inklusive WatchKit och ClockKit.
Den första nya funktionen i WatchKit-ramverket som vi ska titta på är den nya WKCrownSequencer
klass. Med den här klassen kan du hämta detaljerad information om den digitala kronan, inklusive dess aktuella rotationshastighet och om den är ledig eller inte. Medan denna information är tillgänglig via egenskaper på en WKCrownSequencer
objekt, den WKCrownDelegate
protokollet gör att du enkelt kan spåra ändringar.
Allt WKInterfaceController
underklasser har nu a crownSequencer
egendom, vilket är en förekomst av WKCrownSequencer
klass. Det betyder att för att spåra ändringar i den digitala kronan behöver du bara ange ett delegatobjekt och implementera de metoder du vill ha.
Öppna ditt projekt i ditt projekt CrownInterfaceController.swift fil och gör din CrownInterfaceController
klassen överensstämmer med WKCrownDelegate
protokoll:
klass CrownInterfaceController: WKInterfaceController, WKCrownDelegate ...
Nästa, ersätt din nuvarande vaken (withContext :)
metod med följande:
åsidosätta func awake (withContext context: Any?) super.awake (withContext: context) crownSequencer.delegate = self crownSequencer.focus ()
I ovanstående kod kallar vi fokus
metod på crownSequencer
för annars kommer det inte att få händelser från den digitala kronan. Om ett objekt i ditt gränssnitt blir fokuserat av användaren som knackar på det måste du ringa den här metoden igen för crownSequencer
för att upptäcka digital kretsrörelse.
Slutligen lägg till följande två metoder till din klass:
func crownDidRotate (_ crownSequencer: WKCrownSequencer ?, rotationsdel: Dubbel) om låt hastighet = crownSequencer? .rotationsPerSecond label.setText ("Crown \ nspeed: \ n \ (hastighet)" func crownDidBecomeIdle (_ crownSequencer: WKCrownSequencer? ) label.setText ("Crown \ nis idle")
Så att detta gränssnitt är laddat, öppna din Interface.storyboard fil och dra den Initial Controller pil för att välja det nedre gränssnittet:
Bygg och kör din app och du kommer att se att när klockans digitala krona flyttas, speglar skärmetiketten den aktuella statusen:
Om du använder Apple Watch-simulatorn kan du "vrida" den digitala kronan genom att bara bläddra med din Macs mus eller styrplatta.
Förutom att upptäcka digitala kronrörelser ger WatchKit-ramverket i watchOS 3 också följande klasser för din app att upptäcka gester utan att använda gränssnittsobjekt:
WKLongPressGestureRecognizer
WKPanGestureRecognizer
WKSwipeGestureRecognizer
WKTapGestureRecognizer
Som deras namn antyder fungerar dessa gestkännare mycket på samma sätt som gestkännare arbetar på iOS. Dessa klasser är särskilt användbara för att upptäcka beröringar om du använder SceneKit, SpriteKit eller ett anpassat bildbaserat gränssnitt för visning av innehåll.
watchOS 3 ger också några nya viktiga funktioner för appar som utnyttjar ClockKit-ramverket för att ge komplikationer på klockans ansikte.
För det första, på grund av den nya bakgrundsbehandlingsfunktionaliteten för appar i watchOS 3, om en användare lägger en av dina programkomplikationer i sitt klockans ansikte, kommer din app att vara kvar i minnet och förblir i ett startläge. Dessutom är din app garanterad att kunna uppdatera innehållet som svar på push-meddelanden upp till 50 gånger per dag.
Om du vill lära dig mer om den nya bakgrundsappsfunktionaliteten i watchOS 3 har jag redan täckt det här ämnet här:
Därefter har några nya mallar lagts till i den extra stora komplikationsfamiljen, inklusive CLKComplicationTemplateExtraLargeColumnsText
, CLKComplicationTemplateExtraLargeRingImage
, CLKComplicationTemplateExtraLargeRingText
, och CLKComplicationTemplateExtraLargeSimpleImage
.
Slutligen, den CLKTextProvider
klassen tillhandahåller nu ett API för att skapa en lokaliserbar textleverantör för att använda annan text för specifika enhetsområden.
Bortsett från dessa små tillägg, är ClockKit oförändrad från förra årets watchOS 2 release. Om du vill lära dig mer om denna ram och hur du använder det själv kan du kolla in min handledning som täcker den här:
Medan PassKit redan var tillgängligt i en begränsad form i watchOS 2, ger watchOS 3 fullt stöd för Apple Pay-inköp direkt på klockan. Detta görs genom några nya klasser och ett protokoll, inklusive:
WKInterfacePaymentButton
: brukade visa en förkonstruerad Köp med Apple Pay knapp.PKPaymentAuthorizationController
: används för att visa ett modellgränssnitt med betalningsinformation för användaren att bekräfta. Denna klass har samma roll som PKPaymentAuthorizationViewController
klass men beror inte på UIKit. Detta innebär att PKPaymentAuthorizationController
klass kan användas på både iOS och watchOS.PKPaymentAuthorizationControllerDelegate
: klasser kan göras för att överensstämma med detta. Detta protokoll låter din app svara på användarens åtgärder angående din betalning, inklusive när de väljer en betalningsmetod eller när betalningen har godkänts.Sammantaget är watchOS 3 ett viktigt utgivande för utvecklare av Apple Watch-appar. Spel och mediarika applikationer är nu mycket enklare att skapa med tillägg av ramar, inklusive SceneKit, SpriteKit, GameKit och AVFoundation. Tillägget av CloudKit och förbättringar till WatchKit, ClockKit och PassKit gör att du kan skapa mer funktionella appar än någonsin innan du blir mer oberoende av iPhone.
Som alltid, var noga med att lämna dina kommentarer och feedback i kommentarfältet nedan. För en närmare titt på hur man skapar en app i WatchOS, kolla in watchOS 2 From Scratch Course här på Envato Tuts+.