din første watchkit anvendelse: interaktion med brugeren

, din første watchkit anvendelse: interaktion med brugeren,,,,, 28,,,,,,,,,,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss., i det foregående tutorielle udforskede vi grundlaget for watchkit udvikling.vi har skabt et projekt i xcode, tilføjede en watchkit anvendelse og skabt en grundlæggende brugergrænseflade.,, brugergrænsefladen i vores watchkit anvendelse i øjeblikket udviser statiske data.hvis du lever i ørkenen, ikke, at det er meget nyttigt for en vejr anvendelse.i denne forelæsning, kommer vi til at befolke brugergrænsefladen med data og skabe nogle aktioner.,, 1.ajourføring af brugergrænsefladen, trin 1: at erstatte, wkinterfacedate, før vi befolke brugergrænsefladen med data, er vi nødt til at foretage en lille ændring.i den forrige lektion, vi tilføjede, wkinterfacedate,   instans til bunds - gruppen til at vise den aktuelle tid og dato.det ville være mere nyttigt, men at vise tidspunktet og datoen for de oplysninger, vi er med.grunden til denne ændring vil blive klart i et par minutter.,, åben   interface. skitse, fjerne, wkinterfacedate, f.eks. i den nederste gruppe og erstatte det med en, wkinterfacelabel, f.eks.sæt etiketten er  , bredde, idet   i forhold til beholderen, og etiketten er  , tilpasning, til højre for hinanden.,,,,, trin 2: tilføjelse af afsætningsmuligheder, at ajourføre brugergrænsefladen med dynamiske data, er vi nødt til at skabe nogle forretninger i den, interfacecontroller, klasse.åben skitse i de vigtigste redaktør og  , interfacecontroller.swift i, assisterende redaktør, til højre.vælg den øverste mærke i den første gruppe, og  , kontrol, drag, fra etiketten til  , interfacecontroller, klasse for at skabe et marked.navn afgangen, locationlabel,.,, jeg gentager disse foranstaltninger for andre etiketter, dvs. dem, temperaturelabel, og datelabel hhv.det er, hvad  , interfacecontroller, klasse skal se ud, når du er færdig.,, import watchkit import institut klasse interfacecontroller: wkinterfacecontroller {@ iboutlet svage var datelabel: wkinterfacelabel!@ iboutlet svage var locationlabel: wkinterfacelabel!@ iboutlet svage var temperaturelabel: wkinterfacelabel!- arbejdet awakewithcontext (sammenhæng: anyobject?){super. awakewithcontext (baggrund)} tilsidesætte funktion willactivate() (//denne metode kaldes da se betragtning registeransvarlige er ved at være synlige for brugerne, super. willactivate()} tilsidesætte funktion diddeactivate() (//denne metode kaldes da se betragtning registeransvarlige ikke længere er synlige super. diddeactivate()}}, nu er måske et godt tidspunkt at se nærmere på gennemførelsen af  , interfacecontroller, klasse.i den forrige lektion, jeg nævnte, at  , interfacecontroller, arver fra wkinterfacecontroller,.ved første øjekast, det virker som om, wkinterfacecontroller, f.eks. opfører sig som en, uiviewcontroller, tilfælde, men vi har også erfaret i de tidligere lektion i, at der er en række vigtige forskelle.,, til at hjælpe os, xcode er befolket, interfacecontroller, klasse med tre tilsidesat metoder.det er vigtigt at forstå, når hver metode er anvendt, og hvad den kan eller bør anvendes til.,,, awakewithcontect (_:), i, awakewithcontext (_:), metode, du satte op og sæt den grænseflade registeransvarlige.man spørger sig selv, hvor det adskiller sig fra den, lokalitet, metode.det, awakewithcontext (_:), metode er gældende efter den grænseflade registeransvarlige er igangsat.den metode, accepterer en parameter, en situation, der gør det muligt for flyvelederne at passere grænseflade mod oplysninger til hinanden.det er den anbefalede metode til formidling af informationer på tværs af scener, grænseflade kontrollører. willactivate,,,,,,, willactivate, metode ligner den, viewwillappear (_:), metode i  , uiviewcontroller, klasse.det, willactivate, metode anvendes før brugergrænsefladen af grænsefladen registeransvarlige er forelagt for brugeren.det er ideel til at justere brugergrænseflade, før det er forelagt for brugeren. diddeactivate,,,,,,, diddeactivate, metode er modstykket til, willactivate, metode og er gældende, når en scene af grænsefladen registeransvarlige er blevet fjernet.en udrensning koden i denne metode.denne metode ligner den, viewdiddisappear (_:), metode i den, uiviewcontroller, klasse, med de ovenfor i betragtning, kan vi laste data og ajourføring af brugergrænsefladen i vores watchkit anvendelse.lad os starte med at læsse vejr data., 2.- vejret data, bedste praksis, du tænker måske, at det næste skridt er en api - opfordring til en vejrstation, men det er ikke tilfældet.hvis vi var ved at bygge en six anvendelse, ville du have ret.men vi er ved at skabe en watchkit anvendelse. det er ikke anbefalet til komplekse api - opfordres til at hente data til at oprette brugergrænseflade af en watchkit anvendelse.selv om   æble ikke udtrykkeligt nævner dette i den dokumentation, et æble ingeniør har nævnt denne uskrevne bedste praksis i apples udvikler fora.,, watchkit anvendelse, er en del af en six anvendelse, og der er programmerbare anvendelse, der er ansvarlig for hente data fra en fjern backend.der er flere måder, vi kan tage for at gøre det, baggrund nydelig er et godt valg.i denne forelæsning, men vi er ikke kommer til at fokusere på dette aspekt. i stedet vil vi tilføje falske data til bundt watchkit udvidelse og lade den i  , awakewithcontext (_:), metode, som vi tidligere har drøftet, skabe en tom fil. ved at vælge  , nye > fil...  , fra  , fil   menuen.vælg  , tom, fra  , programmerbare > andre afsnit og navn filen  , vejret. json,.tjek, at du sætter sagen til   gøre watchkit forlængelse.kan ikke overse dette lille, men vigtige detaljer.forsyne dossier med følgende data.,, ("steder": [{"sted": "samarbejdet", "temperatur" 24 "timestamp": 1427429751} {"sted": "london", "temperatur": 11, "et tidsstempel": 1427429751} {"sted" "paris", "temperatur": 9, "et tidsstempel": 1427429751} {"sted": "bruxelles", "temperatur": 11, "et tidsstempel": 1427429751}]}, udveksling af data, udveksling af data mellem de programmerbare, anvendelse og watchkit anvendelse er et vigtigt emne.men denne forelæsning fokuserer på at få deres første watchkit anvendelse op og køre.i en kommende forelæsning, vil jeg koncentrere mig om dataudveksling mellem en six - og en watchkit anvendelse.,, selv om vi ikke for dataudveksling i denne forelæsning, det er vigtigt at vide, at programmerbare anvendelse og watchkit udvidelse ikke deler en sandkasse.begge mål har deres egen sandkasse, og det er det, der gør dataudveksling mindre ubetydelige, end det ser ud til, for at udveksle data mellem 105 og watchkit ansøgning, du er nødt til at udnytte app grupper.men det er et emne for en fremtidig tutor.,, trin 1: forøgelse af swiftyjson, swift er et stort sprog, men nogle opgaver er enklere i objective-c, end de er i hurtig.håndtering json, f.eks. en sådan opgave.for at gøre denne opgave nemmere, har jeg valgt at udnytte de populære swiftyjson bibliotek.,, downloade register fra github, luk arkivet, og tilføje,  , swiftyjson.swift, til   gøre watchkit forlængelse - gruppe.denne sag er beliggende i  , kilde, folder i arkivet.kontrollér, at  , swiftyjson.swift, lægges den   gøre watchkit udvidelse  , mål.,,,,, trin 2: at gennemføre, weatherdata, for at gøre det lettere at arbejde med meteorologiske oplysninger, der er lagret i vejret. json, er vi ved at skabe en struktur, der hedder, weatherdata,.vælg, nye > fil fra  ,,  , fil menuen, vælge  , swift - filen, fra  , programmerbare > kilde, afsnit og navn filen  , weatherdata,.sørg for, den fil er tilføjet til   gøre watchkit udvidelse, mål.,, gennemførelsen af den, weatherdata, struktur er kort og enkel.strukturen fastlægger tre faste ejendomme, dato, sted og temperatur,.,, import, struktureret weatherdata {- dato: instituttet nsdate lad placering: string - temperatur: dobbelt}, fordi den temperatur, weather.json, er i celcius, vi også gennemføre en beregnet ejendom  , fahrenheit, let omregning mellem celcius og fahrenheit.,, var fahrentheit: dobbelt {tilbage temperatur * (9 /5) + 32), har vi også definere to hjælper metoder, tocelciusstring, og tofahrenheitstring, gøre formatering temperaturværdier lettere.elsker du ikke swift 's snor interpolation?,, funktion tocelciusstring() - > snor {tilbage ". (temperatur) ° c"} funktion tofahrenheitstring() - > snor {tilbage ". (fahrentheit) ° f"), og, som jeg sagde, gennemførelsen af den, weatherdata, struktur er kort og enkel.det er, hvad gennemførelsen skal se ud. weatherdata {- atlanterhavet, import - fonden: nsdate lad placering: string - temperatur: dobbelt var fahrentheit: dobbelt {tilbage temperatur * (9 /5) + 32} funktion tocelciusstring() - > snor {tilbage ". (temperatur) ° c") tofahrenheitstring() funktion - > snor {tilbage ". (fahrentheit) ° f"), trin 3: - data, før vi læsser data fra vejret. json, er vi nødt til at erklære en ejendom til opbevaring af vejret data.den ejendom, weatherdata, er af typen, [weatherdata], vil indeholde indholdet af weather.json som eksempler på, weatherdata, struktur,.,, var weatherdata: [weatherdata] = [], for at lette anvendelsen for, har vi også erklære en beregnet ejendom, vejret, det giver os adgang det første punkt i, weatherdata, vifte.det er resultatet af denne, weatherdata, f.eks. at vi vil vise i grænseflade - controller.ved du, hvorfor vi er nødt til at erklære  , vejrforhold,   ejendom som en frivillig?,, var vejr: weatherdata?{tilbage weatherdata.first}, vi lader data fra weather.json, i  , awakewithcontext (_:), metode.for at holde gennemførelsen ren, påberåber vi hjælper metode, der hedder, loadweatherdata,.,, før arbejdet awakewithcontext (sammenhæng: anyobject?){super. awakewithcontext (baggrund) //belastning vejr data loadweatherdata()}, gennemførelsen af loadweatherdata, sandsynligvis er det mest skræmmende kode snippet, vi ser i denne forelæsning.som jeg sagde, parsing json er ikke ubetydelig i swift.heldigvis er de fleste af swiftyjson tunge løft for os, loadweatherdata() {lad sti = nsbundle funktion. mainbundle(). pathforresource ("vejr" spp: "json"), hvis vi sti = vej (lad data = nsdata (contentsoffile: vej), hvis vi data = data (lad weatherdata = json (data: data) lad steder = weatherdata ["steder"]. system, hvis vi steder = steder (for placering på steder (lad timestamp = placering ["timestamp"]. dobbelt.lad dato = nsdate (timeintervalsincereferencedate: et tidsstempel) lad model = weatherdata (dato: dato, sted: placering ["sted"]. string.temperatur: placering ["temperatur"].!)selv. weatherdata. både (model)}}}}}, får vi den vej, weather.json, og lade dens indhold som en, nsdata, objekt.vi bruger swiftyjson til at analysere de json, går på, nsdata, objekt.vi får en henvisning til den vifte af nøglen, steder og styr på hvert sted.,, vi få vejret data ved at omdanne det til et tidsstempel, nsdate, f.eks. og sæt en, weatherdata, objekt.endelig er vi tilføje, weatherdata imod, weatherdata, array.,, jeg håber, de er enig i, at gennemførelsen er ikke så svært.fordi swift tvinger os til at træffe en række kontroller gennemførelsen er mere kompliceret, end det rent faktisk er,.,,. 3.- i brugergrænsefladen, med vejret data, klar til brug, det er tid til at ajourføre brugergrænseflade.som jeg forklarede tidligere, ajourføring af brugergrænsefladen skal ske i, willactivate metode.lad os se på gennemførelsen af denne metode. willactivate() tilsidesætte funktion (//denne metode kaldes da se betragtning registeransvarlige er ved at være synlige for brugerne, super. willactivate(), hvis vi vejr = self.weather {locationlabel. settext (vejr. beliggenhed) //ajourføring temperatur etiket selv. updatetemperaturelabel() //ajourføring dato etiket selv. updatedatelabel()), efter at påberåbe sig, willactivate, metode for overklassen, vi pakker den værdi, lagret i vejret, ejendom.at ajourføre den lokaliseringskode, vi påberåber os, settext, passerer i værdien opbevares i, placering, tilhører, vejrforhold, objekt.at ajourføre den temperatur, dato og etiketter, vi påberåber os to hjælper metoder.jeg foretrækker at holde, willactivate, metode og kort, og, hvad vigtigere er, jeg kan ikke lide at gentage mig selv, før vi ser på disse hjælper metoder, vi har brug for at vide, om den temperatur, skal vises i celcius eller fahrenheit.for at løse dette spørgsmål, erklærer en ejendom, celcius,, af typen, bool, og der fastsættes startværdien,,.,, var celcius: bool = sandt, gennemførelsen af updatetemperaturelabel, er let at forstå.vi sikkert ud værdien opbevares i vejret, og ajourfører den temperatur, etiket, baseret på værdien af celcius,.som du kan se, er de to hjælper metoder for, weatherdata, struktur, skabte vi tidligere komme i handy.,, hvis vi updatetemperaturelabel() funktion (vejret = self.weather (hvis self.celcius {temperaturelabel. settext (vejr. tocelciusstring()) andet (temperaturelabel. settext (vejr. tofahrenheitstring())}}}, gennemførelse af updatedatelabel, er ikke svært.- sæt en  , nsdateformatter, f.eks. dets, dateformat, ejendom, og ændre datoen for, vejrforhold, genstand ved at  , stringfromdate (_:), om, dateformatter, objekt.denne værdi anvendes til at ajourføre den dato, updatedatelabel(). funktion (var - dato: nsdate = nsdate() //påbegynd dato formatter lad dateformattter = nsdateformatter() //konfigurere dato formatter dateformattter.dateformat = d /mm (tt: mm "hvis vi vejr = self.weather {dato} = weather.date //ajourføringsdatoen etiket datelabel. settext (dateformattter. stringfromdate (dato)), bygge og drive anvendelsen se resultatet.brugergrænsefladen bør nu blive befolket med data fra vejret. json,.,,,,, 4.skifter til fahrenheit, det ser godt ud.men ville det ikke være fedt, hvis vi tilføjede støtte til både celcius og fahrenheit?det er ikke nemt at gøre, for vi har allerede de fleste af forarbejdet.,, hvis brugeren kraft berører brugergrænsefladen af en brugergrænseflade registeransvarlige, en menu er vist.selvfølgelig, det virker kun, hvis en menu er til rådighed.lad os se, hvordan det her fungerer.,, åben  , interface.storyboard, og tilføje en menu til   interface registeransvarlige i  , dokument skitserer, til venstre.ved misligholdelse, en menu er en menu.vi har brug for to menu genstande, så tilføje en anden menupunkt på menuen.,,,,, bemærke, at menuen og menuen poster er ikke synlige i brugergrænsefladen.det er ikke et problem, da vi ikke kan få opstilling af menuen.hvad kan vi ændre er teksten til en menupunkt og dets image.du vil forstå, hvad det betyder, når vi skal præsentere menuen.,, vælges den øverste menupunkt, åben den  , attributter inspektør, der er  , titel, at  , celcius, og  , image, at  , acceptere.vælg den nederste menupunkt og  , titel, at  , fahrenheit og image, at  , acceptere.,,,,, næste, åben  , interfacecontroller. hurtig  , i  , assisterende redaktør  , til højre.  , kontrol, trække   fra toppen menupunkt med  , interfacecontroller.swift og skabe en aktion, der hedder  , tocelcius,.gentag dette trin for bunden menupunkt, oprettelse af en aktion, der hedder  , tofahrenheit,.,, gennemførelsen af disse aktioner er kort.i tocelcius, tjekker vi, hvis den, celcius,   ejendom er sat til, falske, og, hvis det er, sætter vi den ejendom, sandt.i  , tofahrenheit, tjekker vi, hvis den, celcius, ejendom, der er rigtigt, og, hvis det er, sætter vi den ejendom, falske,.,, @ ibaction funktion tocelcius() (hvis!self.celcius {self.celcius = sandt}} @ ibaction funktion tofahrenheit() (hvis self.celcius {self.celcius = falske}}, hvis værdien af celcius, ændringer, vi har brug for en ajourføring af brugergrænsefladen.hvilken bedre måde at gøre dette ved at gennemføre en ejendom observatør om, celcius, ejendom.vi behøver kun at gennemføre en, didset, ejendom observatør.,, var celcius: bool = sand (didset (hvis celcius!= oldvalue {updatetemperaturelabel()}}}, det eneste, der er værd at nævne, er, at brugergrænsefladen er opdateret, hvis værdien af  , celcius, gjort.ajourføring af brugergrænsefladen er så enkelt som at  , updatetemperaturelabel,.   bygge og drive den watchkit anvendelse i six simulator for at teste menuen.,,,,, er det værd at nævne, at den programmerbare simulator efterligner lydhørhed over for en fysisk enhed.hvad betyder det?kan du huske, at watchkit udvidelse kører på en iphone, mens watchkit anvendelse er et æble, pas på.når brugeren og menupunkt, røre begivenhed er sendt en bluetooth forbindelse til iphone.den watchkit udvidelse processer tilfælde og sender eventuelle opdateringer tilbage til apple ur.denne meddelelse er meget hurtigt, men det er ikke så hurtigt, hvis både udvidelse og anvendelse er at løbe på samme anordning.det er en kort forsinkelse efterlignede af programmerbare simulator for at hjælpe udviklere, få et indtryk af ydeevne.,, konklusion, når du har pakket hovedet omkring opbygningen af en watchkit anvendelse, bliver det meget nemmere at forstå de muligheder og begrænsninger af den første generation af watchkit ansøgninger.i denne forelæsning, vi har kun dækket hovedpunkterne i watchkit udvikling.der er meget mere at udforske og undersøge.bliv hængende.

Adding a Label
Adding the SwiftyJSON Library
The Finished User Interface of RainDrop
Adding a Menu with Two Menu Items
Configuring a Menu Item



Previous:
Next Page: