ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãwatchOS 4çšã®ã·ã³ãã«ã ãå®å
šã«æ©èœããã¢ããªã±ãŒã·ã§ã³ãäœæããŸããå
·äœçã«ã¯ãApple Watchçšã®Air Aberèªç©ºäŒç€Ÿã®ã¢ããªã±ãŒã·ã§ã³ã«åãçµã¿ãŸãã
ãã®ãã¥ãŒããªã¢ã«ã§ã¯æ¬¡ã®ããšã説æããŸãã
- watchOS 4ã®ã¿ãŒã²ãããã«ããiOSã¢ããªã«è¿œå ããæ¹æ³ã
- 2ã€ã®ã¿ãŒã²ããã¢ã»ã³ããªéã§ããŒã¿ã亀æããæ¹æ³ã
- watchOSã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãStoryboardã«è¿œå ããã€ã³ã¿ãŒãã§ã€ã¹ãªããžã§ã¯ããé
眮ããæ¹æ³ã
WKInterfaceController
ããµãã¯ã©ã¹WKInterfaceController
ããã¹ãŠããŸãšããæ¹æ³ã- æ°ããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã远å ããããŒãã«ã远å ããŠãè¡ãããããã¿ã€ããäœæããæ¹æ³ã
WKInterfaceController
ã¯ã©ã¹ããµãã¯ã©ã¹åããŠãããŒãã«ã«å
¥åããè¡ãã«ã¹ã¿ãã€ãºããéžæãåŠçããæ¹æ³ã- ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãã¢ãŒãã«ã«ãã衚瀺çšã«ããŒã¿ãéä¿¡ããæ¹æ³ã
- ç»åã«åºã¥ããŠã¢ãã¡ãŒã·ã§ã³ãäœæããæ¹æ³ã
- watchOS 4ã¢ãã¡ãŒã·ã§ã³APIã®äœ¿ç𿹿³ã
ããŒã1ïŒã¯ããã«
ãã®éšåããæ¬¡ã®ããšãåŠã³ãŸãã
- watchOS 4ã®ã¿ãŒã²ãããã«ããiOSã¢ããªã«è¿œå ããæ¹æ³ã
- 2ã€ã®ã¿ãŒã²ããã¢ã»ã³ããªéã§ããŒã¿ã亀æããæ¹æ³ã
- watchOSã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãStoryboardã«è¿œå ããã€ã³ã¿ãŒãã§ã€ã¹ãªããžã§ã¯ããé
眮ããæ¹æ³ã
WKInterfaceController
ããµãã¯ã©ã¹WKInterfaceController
ããã¹ãŠããŸãšããæ¹æ³ã
éãã
ãã®ãã¥ãŒããªã¢ã«ã®
åæãããžã§ã¯ããããŠã³ããŒãããããšããå§ããŸãããã
Xcodeã§éãããã«ãããŠå®è¡ããŸãã 空çœã®çœãç»é¢ã衚瀺ãããã¯ãã§ãã
ã芧ã®ãšããããããŸã§ã®ãšããããã®ãããžã§ã¯ãã«ã¯éåžžã«å€ãã®ãã®ããããŸããããã€ãã®å¿
èŠãªè£å©ãã¡ã€ã«ããããããã ãã§ãã ãã®åé¡ã¯ããã«è§£æ±ºããŸãïŒ
WatchKitã¢ããªã远å ãã
ãã¡ã€ã«\æ°èŠ\ã¿ãŒã²ãã...ãéžæããŸãã éãããã€ã¢ãã°ã§ã watchOS \ Application \ WatchKit Appãéžæãã[ 次㞠]ãã¯ãªãã¯ããŸãã
次ã®ç»é¢ã§ã
補ååãšããŠã
ãŠã©ããããšããåèªãå
¥åããã
èšèªããã£ãŒã«ãã§ã
SwiftããéžæãããŠããããšã確èªããéžæãããã¹ãŠã®ãã§ãã¯ããã¯ã¹ããªãã«ããŸãã [
å®äº ]ãã¯ãªãã¯ããŸãã
ã·ã¹ãã ã¯ãããŠã©ãããã¹ããŒã ãã¢ã¯ãã£ãã«ããå¿
èŠããããã©ãããå°ããŸãããããå¿
èŠã«ãªãã®ã§ã
ã¢ã¯ãã£ãåãéžæããŸãã
ããã§ãšãããããŸããæåã®Watchã¢ããªãäœæããŸããïŒ ãã¹ãŠãæ¬åœã«ã·ã³ãã«ã§ãã
ãã®ã¢ã¯ã·ã§ã³ã«ããããããžã§ã¯ãããã²ãŒã¿ã§ã1ã€ã§ã¯ãªã2ã€ã®ã¿ãŒã²ããã¢ã»ã³ããªãšã2ã€ã®å¯Ÿå¿ããã°ã«ãŒããå®éã«äœæãããããšãããããŸãã ããã¯ãiOSã§Todayæ¡åŒµæ©èœãåäœããã®ãšåãããã«ãWatchã¢ããªã±ãŒã·ã§ã³ã³ãŒããå®éã«Watchã¢ããªã±ãŒã·ã§ã³å
ã«å«ãŸããæ¡åŒµæ©èœïŒæ¡åŒµæ©èœïŒãšããŠå®è¡ãããããã«çºçããŸããã
Projectããã²ãŒã¿ãŒã§
Watchããã³
Watch Extensionã°ã«ãŒããå±éãããšãã¹ããŒãªãŒããŒãã
Watchã°ã«ãŒãã«ãããã¿ãŒã²ããã¢ã»ã³ããªãã³ãã¬ãŒãã«ãã£ãŠäœæãããã¯ã©ã¹ã
Watch Extensionã°ã«ãŒãã«ããããšãããããŸãã
ããã¯ãäœæ¥ã§åŸãé åºã§ãã远å ãããã³ãŒãã¯
Watch Extensionã°ã«ãŒãå
ã«ä¿åãããã¿ãŒã²ããã®
Watch Extensionã¢ã»ã³ããªã«è¿œå ããããªãœãŒã¹ãŸãã¯ã¹ããŒãªãŒããŒãã¯
Watchã°ã«ãŒãã«è¿œå ãããŸãã
å°ãæé€
ç¶è¡ããåã«ã眮æããã¿ãŒã²ããã¢ã»ã³ããªãã³ãã¬ãŒãã«ãã£ãŠè¿œå ãããããã€ãã®èŠçŽ ãåé€ããå¿
èŠããããŸãã
Projectããã²ãŒã¿ã§
InterfaceController.swiftãå³ã¯ãªãã¯ãã[
åé€]ãéžæããŸãã ãã€ã¢ãã°ããã¯ã¹ã§ã[
ãŽãç®±ã«ç§»å ]ãéžæããŠããã¡ã€ã«ããããžã§ã¯ãããå®éã«åé€ãããããã«ããŸãã
次ã«ã
Interface.storyboardãéããããã§äœ¿çšå¯èœãªå¯äžã®ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãéžæããŠã
åé€ãã¿ã³ãã¯ãªãã¯ããŸãã çµæãšããŠã空ã®ã¹ããŒãªãŒããŒãããŸãã¯ç§ã奜ãããã«ç©ºã®ãã£ã³ãã¹ãå¿
èŠã§ãã
äžè¬çãªããŒã¿ãšã³ãŒã
åæãããžã§ã¯ãã«ã¯ãAir Aberãã©ã€ãã«é¢ãããã¹ãŠã®æ
å ±ãšããã®ããŒã¿ã衚ãã¢ãã«ã¯ã©ã¹ãå«ãJSONãã¡ã€ã«ããããŸãã ããã¯ãiOSã¢ããªã±ãŒã·ã§ã³ãšWatchã¢ããªã±ãŒã·ã§ã³ãåãã¯ã©ã¹ã®ã¢ãã«ãšããŒã¿ã䜿çšããå¯èœæ§ãé«ããããã¿ãŒã²ããã¢ã»ã³ããªéã§å
±éããå¿
èŠããããã®ã§ã
ãDRYã®ååãèŠããŠããŸããïŒ
ãããžã§ã¯ãããã²ãŒã¿ã§
å
±æã°ã«ãŒããå±éãã
Flights.jsonãéžæããŸãã æ¬¡ã«ã
ãã¡ã€ã«ã€ã³ã¹ãã¯ã¿ãŒã§[
ã¿ãŒã²ããã¡ã³ããŒã·ãã]ã»ã¯ã·ã§ã³ãèŠã€ãã[
ãŠã©ããæ¡åŒµæ©èœ]ãã§ãã¯ããã¯ã¹ããªã³ã«ããŸãã
ããã§ããã¡ã€ã«ã¯
AirAberãš
Watch Extensionã® äž¡æ¹ã«å«ãŸããŸãã
å
±æã°ã«ãŒãå
ã®å¥ã®ãã¡ã€ã«
-Flight.swiftã«å¯ŸããŠããã»ã¹ãç¹°ãè¿ããŸãã
ããã§ããããããã©ã€ãæ
å ±ã€ã³ã¿ãŒãã§ã€ã¹ã®äœæãéå§ã§ããŸãïŒ
ã€ã³ã¿ãŒãã§ã€ã¹äœæ
Watch \ Interface.storyboardãéãã
ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒããªããžã§ã¯ãã©ã€ãã©ãªããã¹ããŒãªãŒããŒããã£ã³ãã¹ã«ãã©ãã°ã
ãŸã ã ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãéžæããç¶æ
ã§ã[屿§]ã€ã³ã¹ãã¯ã¿ãŒãéãã[
èå¥å]ã[
ãã©ã€ã]ã«èšå®ããŠã[
åæã³ã³ãããŒã©ãŒ]ãã§ãã¯ããã¯ã¹ããªã³ã«ããŸãã
ããŒãæã®
ã¢ã¯ãã£ããã£ã€ã³ãžã±ãŒã¿ã®ãã§ãã¯ãå€ããŸãã
ãã®ãããã³ãŒãã§ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã«ã¢ã¯ã»ã¹ã§ããããã«èå¥åãèšå®ããŸãã [
ã€ãã·ã£ã«ã³ã³ãããŒã©ãŒ]ãã§ãã¯ããã¯ã¹ããªã³ã«ããããšã§ãWatchã¢ããªã±ãŒã·ã§ã³ãåããŠèµ·åãããšãã«ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã衚瀺ããå¿
èŠãããããšãWatchKitã«ç¥ãããã ãã§ãã ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ããŒã¿ãããŠã³ããŒãããªããããã¢ã¯ãã£ããã£ã€ã³ãžã±ãŒã¿ã衚瀺ããå¿
èŠã¯ãããŸããã
ãã®ãã¥ãŒããªã¢ã«ãç°¡çŽ åããããã«ã42 mmæèšã®ã¿ã®ã€ã³ã¿ãŒãã§ã€ã¹å³ãäœæããŸãã ç¬èªã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã¹ãŠã®æèšãµã€ãºã§æ£ãã衚瀺ããããã©ããã確èªããå¿
èŠããããŸãã
è¡šç€ºæ¹æ³ïŒã¹ããŒãªãŒããŒãã®å·Šäžé
ã§
Apple Watch 42mmãéžæããå¿
èŠããããŸãã
Watchã¢ããªã®ã¬ã€ã¢ãŠãã¯ãiOSã®ã¬ã€ã¢ãŠããšã¯ãŸã£ããç°ãªããŸãã æåã«æ°ä»ãã®ã¯ãUIãªããžã§ã¯ããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã«ãã©ãã°ããŠç§»åãŸãã¯å€æŽã§ããããšã§ãã ãªããžã§ã¯ããã³ã³ãããŒã©ãŒã«ãã©ãã°ãããšããã®ãªããžã§ã¯ãã¯åã®ãªããžã§ã¯ãã®äžã«é
眮ãããç»é¢ãããã«ãã£ã±ãã«ãªããŸãã ãªããžã§ã¯ããäžåã«äžŠã¹ãã«ã¯ãiOSããã³macOSã®ã¹ã¿ãã¯ãã¥ãŒã«éåžžã«äŒŒã
ã°ã«ãŒãã䜿çšããå¿
èŠããããŸãã
ãã®ãããæåã«ããªããžã§ã¯ãã©ã€ãã©ãªãã
ã°ã«ãŒã ïŒã°ã«ãŒãïŒãã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã«ãã©ãã°ããŸãã
ä»ã®ãšããããŸãå°è±¡çã§ã¯ãããŸãããããã®ã°ã«ãŒãã«ã¯å°æ¥çã«ãšã¢ã¢ããŒã®ããŽããã©ã€ãçªå·ãé£è¡ã«ãŒããå«ãŸããäºå®ã§ãã
æ°ããã°ã«ãŒããéžæããåŸã屿§ã€ã³ã¹ãã¯ã¿ãŒã«ç§»åãã
ã€ã³ã»ããã
ã«ã¹ã¿ã ã«å€æŽããŸãã ã°ã«ãŒãã®ã€ã³ãã³ããæåã§èšå®ã§ãã4ã€ã®ããã¹ããã£ãŒã«ãã衚瀺ãããŸãã
Topã®å€ã
6ã«å€æŽããŸãã
ãã®æ¹æ³ã§ã¯ãäžéšã«ããå°ãã€ã³ãã³ãã远å ããã ãã§ãã
次ã«ã
ç»åã°ã«ãŒãã«ãã©ãã°ã¢ã³ãããããããŸãã ã°ã«ãŒããã€ã³ãã³ãã«æãç³ãããšã§åå¿ããå ŽåïŒ
thanksãXcodeïŒ ïŒãç»åãããã¥ã¡ã³ãã¢ãŠãã©ã€ã³ã«çŽæ¥ãã©ãã°ããæ¬¡ã®ã°ã«ãŒãã§ã¯ãªãã°ã«ãŒãã®åã«ãªãããšã確èªããŸãã
次ã«ã衚瀺ãããç»åãå¿
èŠã§ãã
ãã®ããŽãããŠã³ããŒãããŠã
Watch \ Assets.xcassetsã«ãã©ãã°ããŸãã ç»åã2åã®ã¹ããããå ããæ°ããç»åã»ãããäœæãããŸãã
ãã®ç»åã«ã³ãŒãã¬ãŒãã«ã©ãŒã®Air Aberã®ã¿ãããå ãããã®ã§ãç»åãéžæãã[
ãã³ãã¬ãŒãç»åã« ã¬ã³ããªã³ã°]ã®å€ã倿ŽããŸãã
Watch \ Interface.storyboardãå床éããŠã
imageãéžæã
ãŸã ã 屿§ã€ã³ã¹ãã¯ã¿ãŒã䜿çšããŠã次ã®å€æŽãè¡ããŸãã
- Imageã®å€ãLogoã«å€æŽããŸã-ããããããŠã³ã¡ãã¥ãŒã«è¡šç€ºãããªãå Žåã¯ãããŒããŒãããå
¥åããŸãã
- è²åãã®å€ãïŒFA114Fã«å€æŽããŸãïŒColor RGB Slidersããã«ã«å
¥åã§ããŸãïŒã
- 40ã®å€ã§ãã å¹
ããã©ã¡ãŒã¿ãŒãã åºå®ãã«å€æŽããŸãã
- Heightãã©ã¡ãŒã¿ãŒãå€40ã§ Fixedã«å€æŽããŸãã
屿§ã€ã³ã¹ãã¯ã¿ãŒã¯æ¬¡ã®ããã«ãªããŸãã
ããŽã衚瀺ãããŠããªããŠãå¿é
ããå¿
èŠã¯ãããŸãããXcodeã¯éçºäžã«ç»åãã³ãã¬ãŒãã®è²çžã倿Žããªãããã§ãã ä¿¡ããŠãã ãããã¢ããªã±ãŒã·ã§ã³ããã«ãããŠå®è¡ãããšãæãããã³ã¯è²ã«ãªããŸãã
次ã«ãäœæãã
ã°ã«ãŒãã«å¥ã®
ã°ã«ãŒãããã©ãã°ããç»åã®å³åŽã«è¡šç€ºãããããšã確èªããŠããã屿§ã€ã³ã¹ãã¯ã¿ãŒã䜿çšããŠãã®
ã¬ã€ã¢ãŠãã
Verticalã«å€æŽããŸãã ãŸãã
ééã
ã«ã¹ã¿ã \ 0ã«å€æŽãã
å¹
ã
ã³ã³ãã³ãã«åãããŠ
ãµã€ãºã«å€æŽããŸãã
次ã«ã2ã€ã®
ã©ãã«ãæ°ããã°ã«ãŒãã«ãã©ãã°ã¢ã³ãããããããŸãã åçŽæ¹åã®äœçœ®ãèšå®ããŠãã©ãã«ãäžäžã«è¡šç€ºãããããã«ããŸãã
ãããã©ãã«ãéžæãã屿§ã€ã³ã¹ãã¯ã¿ãŒã䜿çšããŠ
ããã¹ããã£ãŒã«ãã«
Flight 123ãå
¥åãã
ããã¹ãã«ã©ãŒã
ïŒFA114Fã«å€æŽã
ãŸã ïŒRGBããã«ãåå
¥åãã代ããã«ãã«ã©ãŒã¡ãã¥ãŒã®
æè¿äœ¿çšããã«ã©ãŒãªã¹ããããã³ã¯ãéžæã§ããŸãïŒã
次ã«ãäžã®ã©ãã«ãéžæãã[
ããã¹ã]ãã£ãŒã«ãã«
MEL to SFOãšå
¥åããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã¯æ¬¡ã®ããã«ãªããŸãã
ãã®ããã¹ãã¯äžæçãªãã®ã§ãããã€ã³ã¿ãŒãã§ã€ã¹ãã³ã³ãããŒã©ãŒã¯ã©ã¹ã«æ¥ç¶ãããšçœ®ãæããããŸãã
次ã«ãå¥ã®
ã°ã«ãŒããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã«ãã©ãã°ããŸãããä»åã¯å¿
ãæåã®ã°ã«ãŒãã®é£æ¥èŠçŽ ãšããŠè¿œå ããŠãã ããã ã°ã«ãŒããéå±€å
ã§æ£ããé
眮ã§ããªãå Žåã¯ãããã¥ã¡ã³ãã¢ãŠãã©ã€ã³ã䜿çšããŸãã
ãã®æ°ããã°ã«ãŒããéžæããç¶æ
ã§ã
ã¬ã€ã¢ãŠãã
åçŽã« ã
ééã
ã«ã¹ã¿ã \ 0ã«èšå®ããŸãã
次ã«ã3ã€ã®
ã©ãã«ããã®æ°ããã°ã«ãŒãã«ãã©ãã°ã¢ã³ãããããããŸãã
ããã¥ã¡ã³ãã®ã¢ãŠãã©ã€ã³ã§ã3ã€ãã¹ãŠã®ã©ãã«ãã°ã«ãŒãã®æšªã«ããã®ã§ã¯ãªã
ãã°ã«ãŒã
å
ã«ããããšã確èªããŠãã ãã
ãããã©ãã«ãéžæãã屿§ã€ã³ã¹ãã¯ã¿ãŒã
Text to
AA123 Boardsã«å€æŽããŸãã
次ã«ãäžå€®ã®ã©ãã«ãéžæãã
Textã
15:06ã«çœ®ãæããŸãã æ¬¡ã«ã
Text Colorã
ïŒFA114Fã«ã
Fontã
Systemã«å€æŽãã
Styleã
Regularã«èšå®ããŠã
Sizeã
54ã«éžæããŸãã æåŸã«ã
44ã®å€ã§
Heightã
Fixedã«å€æŽããŸãã
äžã®ã©ãã«ãéžæãããã®
ããã¹ãã
On timeã« ã
ããã¹ãã®è²ã
ïŒ04DE71ã«çœ®ãæããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã¯æ¬¡ã®ããã«ãªããŸãã
次ã«ãå¥ã®ã°ã«ãŒãã远å ããã ãã§ããã®ã€ã³ã¿ãŒãã§ãŒã¹ãå®éã®ããŒã¿ã衚瀺ã§ããããã«ãOutletã¯ã©ã¹ã®ãã£ãŒã«ãã®äœæã«é²ã¿ãŸãã
æ°ãã
ã°ã«ãŒãããªããžã§ã¯ãã©ã€ãã©ãªããäžã®ã°ã«ãŒãã«ãã©ãã°ããŸããä»åã¯åã§ããããããå«ãã°ã«ãŒãã®äžçªäžã«ããã¯ãã§ãã æ¬¡ã«ã2ã€ã®
ã©ãã«ã远å
ããŸã ã ããã§ãã€ã³ã¿ãŒãã§ã€ã¹ãªããžã§ã¯ãã®å®å
šãªéå±€ã¯æ¬¡ã®ããã«ãªããŸãã
å·Šã©ãã«ã®
ããã¹ãã®å±æ§ã€ã³ã¹ãã¯ã¿ãŒã
Gate 1Aã«èšå®ããŸãã å³ã©ãã«ã®
Textå€ã
Seat 64Aã«èšå®ãã
Horizoâântal Alignmentã® Rightãªãã·ã§ã³ãéžæããŸãã
ããã§ã宿ããã€ã³ã¿ãŒãã§ãŒã¹ã¯æ¬¡ã®ããã«ãªããŸãã
ããã§ãšãããããŸããããã§ãæåã®Watchã¢ããªã®ã€ã³ã¿ãŒãã§ãŒã¹ã¬ã€ã¢ãŠãã®äœæãå®äºããŸããã æ¬¡ã«ãå®éã®ããŒã¿ãå
¥åããŠãã·ãã¥ã¬ãŒã¿ãŒã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããå¿
èŠããããŸãã
ã³ã³ãããŒã©ãŒã®äœæ
Projectããã²ãŒã¿ã§
Watch Extensionã°ã«ãŒããå³ã¯ãªãã¯ãã
New File ...ãéžæã
ãŸãã éãããã€ã¢ãã°ã§ã
watchOS \ Source \ WatchKit Classãéžæãã
Nextãã¯ãªãã¯ããŸãã æ°ããã¯ã©ã¹ã«
FlightInterfaceControllerãšããååãä»ããããã
WKInterfaceController
ãµãã¯ã©ã¹ã§
WKInterfaceController
ã
èšèªã
Swiftã«èšå®ãããŠããããšã確èªã
ãŸã ã
[
次ãž] ã[
äœæ]ã®é ã«ã¯ãªãã¯ã
ãŸã ã
ã³ãŒããšãã£ã¿ãŒã§æ°ãããã¡ã€ã«ãéãããã3ã€ã®ç©ºã®ã¡ãœãããã©ã³ã¯ãåé€ããŸããã€ã³ããŒãã¹ããŒãã¡ã³ããšã¯ã©ã¹å®çŸ©ã®ã¿ãå¿
èŠã§ãã
FlightInterfaceController
äžã«æ¬¡ã®ã¢ãŠãã¬ãããã£ãŒã«ãã远å ããŸãã
@IBOutlet var flightLabel: WKInterfaceLabel! @IBOutlet var routeLabel: WKInterfaceLabel! @IBOutlet var boardingLabel: WKInterfaceLabel! @IBOutlet var boardTimeLabel: WKInterfaceLabel! @IBOutlet var statusLabel: WKInterfaceLabel! @IBOutlet var gateLabel: WKInterfaceLabel! @IBOutlet var seatLabel: WKInterfaceLabel!
ããã§ã¯ã以åã«ã€ã³ã¿ãŒãã§ã€ã¹ã«é
眮ããåã©ãã«ã«ã¢ãŠãã¬ããã远å ããŸããã éããªãæ¥ç¶ããŸãã
次ã«ãã¢ãŠãã¬ãããã£ãŒã«ãã®äžã«æ¬¡ã®ããããã£ãšããããã£ãªãã¶ãŒãã远å ããŸãã
// 1 var flight: Flight? { // 2 didSet { // 3 guard let flight = flight else { return } // 4 flightLabel.setText("Flight \(flight.shortNumber)") routeLabel.setText(flight.route) boardingLabel.setText("\(flight.number) Boards") boardTimeLabel.setText(flight.boardsAt) // 5 if flight.onSchedule { statusLabel.setText("On Time") } else { statusLabel.setText("Delayed") statusLabel.setTextColor(.red) } gateLabel.setText("Gate \(flight.gate)") seatLabel.setText("Seat \(flight.seat)") } }
ããã§ãåã¹ãããã§äœãèµ·ãããã瀺ããŸãã
Flight
åã®è£å©ããããã£ã宣èšããŸããã ãã®ã¯ã©ã¹ã¯Flight.swiftã§å®£èšãããŠããŸã ãããã¯ãã¿ãŒã²ããã®Watch Extensionæ§æã«ä»¥åã«è¿œå ãããå
±éã³ãŒãã®äžéšã§ãã- ããããã£ãèšå®ããããšãã«å®è¡ãããããããã£ãªãã¶ãŒãã远å ããŸããã
- è£å©ããããã£ã«å®éã«ãã©ã€ããå«ãŸãã
nil
ã§ã¯ãªãããšã確èªããŸãã æ£ããFlight
ã€ã³ã¹ã¿ã³ã¹ãããããšãããã£ãŠããå Žåã«ã®ã¿ãã¿ã°ã®æ§æãç¶è¡ã§ããŸãã - é©åãª
flight
ããããã£ã䜿çšããŠã¿ã°ãèšå®ããŸãã - ãã©ã€ããé
ããå Žåãã©ãã«ã®ããã¹ãã®è²ãèµ€ã«å€æŽããŸãã
ããã§ãã³ã³ãããŒã©ãŒã®æåã®ãã£ã¹ãã¬ã€ã§
flight
ãèšå®ããå¿
èŠããããŸãã
flight
宣èšã®äžã«æ¬¡ã®è¡ã远å ããŸãã
override func awake(withContext context: Any?) { super.awake(withContext: context) flight = Flight.allFlights().first }
次ã®ããŒãã§ã¯ãæž¡ãããã³ã³ããã¹ãã䜿çšããããã«ãã®å®è£
ã倿ŽããŸãããä»ã®ãšããã¯äžè¬çãªJSONãã¡ã€ã«ãããã¹ãŠã®ãã©ã€ããããŒãããé
åããæåã®ãã©ã€ããååŸããŸãã
泚 ïŒ
awake(withContext:)
ã¯ãã³ã³ãããŒã©ãŒãã¹ããŒãªãŒããŒãããèªã¿èŸŒãŸãããã®ãã¹ãŠã®ã¢ãŠãã¬ãããã£ãŒã«ããæ§æãããåŸã«åŒã³åºããããããããã¯
flight
ãèšå®ããã®ã«æé©ãªå Žæã§ãã
ã¢ããªã±ãŒã·ã§ã³ããã«ãããŠå®è¡ããåã«æ®ã£ãŠããæåŸã®ã¹ãããã¯1ã€ã ãã§ãããã®ã¹ãããã¯ãã¢ãŠãã¬ãããã£ãŒã«ããæ¥ç¶ããããšã§ãã
ã³ã³ã»ã³ããã£ãŒã«ããæ¥ç¶ãã
Watch \ Interface.storyboardãéããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãéžæããŸãã Identityã€ã³ã¹ãã¯ã¿ãŒã䜿çšããŠã
Custom Class \ Classã
FlightInterfaceControllerã«èšå®ã
ãŸã ã
次ã«ã以äžã®ãªã¹ãã«åŸã£ãŠã³ã³ã»ã³ããã£ãŒã«ããæ¥ç¶ããŸãã
flightLabel
ïŒ123䟿routeLabel
ïŒMELããSFOboardingLabel
ïŒAA123ããŒãboardTimeLabel
ïŒ15:06statusLabel
ïŒæééãgateLabel
ïŒã²ãŒã1AseatLabel
ïŒã·ãŒã64A
ã¢ããªã±ãŒã·ã§ã³ãéå§ããåã«ãå¿
èŠãªããšã¯1ã€ã ãã§ãã ãã®ãã¥ãŒããªã¢ã«ã§éçºããã¢ããªã±ãŒã·ã§ã³ã®äŸã¯42 mmã®Apple Watchçšã«äœæããããããæ£ããã·ãã¥ã¬ãŒã¿ãèšå®ãããŠããããšã確èªããå¿
èŠããããŸããããããªããšãã€ã³ã¿ãŒãã§ã€ã¹ãå°ãæªãã§èŠããå ŽåããããŸãã ãããã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãéçºè
ã¯ãã¹ãŠã®æèšãµã€ãºã§ã€ã³ã¿ãŒãã§ãŒã¹ã®åäœããã¹ãããŸãããããã¯ãã®ãã¥ãŒããªã¢ã«ã®ãããã¯ã«ã¯é©çšãããŸããã
[Watch Scheme]ã¡ãã¥ãŒãéãã42 mmãŠã©ããã·ãã¥ã¬ãŒã¿ãŒã®ãããããéžæããŸãã
ã¢ããªã±ãŒã·ã§ã³ããã«ãããŠå®è¡ããŸãã ã·ãã¥ã¬ãŒã¿ãŒã®ããŠã³ããŒããå®äºãããšãæ£ããã€ã³ã¿ãŒãã§ãŒã¹ã¬ã€ã¢ãŠããšãã³ã¯ã®Air AberããŽã衚瀺ãããŸãã
Flight
ãªããžã§ã¯ãã¯ãçéžæéãšåº§åžçªå·ã®ã©ã³ãã ãªå€ãçæãããããä»ã®å€ã衚瀺ãããŸãã
泚 ïŒã€ã³ã¹ããŒã«ã®å€±æã«é¢ããã¡ãã»ãŒãžã衚瀺ãããå Žåã¯ãXcodeã§ããã»ã¹ãç¹°ãè¿ãããã¯ããã¯ã·ãã¥ã¬ãŒã¿ãŒã§ã¢ããªã±ãŒã·ã§ã³ãæåã§ã€ã³ã¹ããŒã«ããŠãã ããã ãããè¡ãã«ã¯ãiOSã·ãã¥ã¬ãŒã¿ãŒã§Watchã¢ããªã±ãŒã·ã§ã³ãéãã
AirAberãã¿ããããŠ
ãã ã
Apple Watchã§ã¢ããªã衚瀺ããããªã³ã«åãæ¿ããŸãã ãã®åŸãã¯ããã¯ã·ãã¥ã¬ãŒã¿ãŒã«æ»ãã
Digital Crownãã¿ããããŠã¡ã€ã³ç»é¢ã«ç§»åããAirAberã¢ã€ã³ã³ãã¿ããããŠã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã
ããã§ãšãããããŸãïŒ æåã®WatchKitã€ã³ã¿ãŒãã§ãŒã¹ã®å®è£
ãå®äºããå®éã®ããŒã¿ãåããã¯ããã¯ã·ãã¥ã¬ãŒã¿ãŒã§åäœããŸã-ãã°ãããä»äºã§ãïŒ
ãã¥ãŒããªã¢ã«ã®ãã®éšåã§è¡ã£ãããšã®
æ¢è£œã®äŸã次ã«ç€ºããŸãã
ããŒã2ïŒããŒãã«
ãã¥ãŒããªã¢ã«ã®æåã®éšåã§ã¯ãæåã®ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãäœæããŠãwatchOS 4ã®éçºã®åºæ¬ã«ã€ããŠåŠã³ãŸããã
ã·ãªãŒãºã®ç¬¬2éšã§ã¯ãã¢ããªã±ãŒã·ã§ã³ããã©ã€ãã®ãªã¹ãã衚瀺ã§ããããã«ããŒãã«ã远å ããŸãã
ãã®éçšã§ã次ã®ããšãåŠã³ãŸãã
- æ°ããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã远å ããããŒãã«ã远å ããŠãè¡ãããããã¿ã€ããäœæããæ¹æ³ã
WKInterfaceController
ã¯ã©ã¹ããµãã¯ã©ã¹åããŠãããŒãã«ã«å
¥åããè¡ãã«ã¹ã¿ãã€ãºããéžæãåŠçããæ¹æ³ã- ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãã¢ãŒãã«ã«ãã衚瀺çšã«ããŒã¿ãéä¿¡ããæ¹æ³ã
ä»äºãå§ãã
Watch \ Interface.storyboardãéããå¥ã®
ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒããªããžã§ã¯ãã©ã€ãã©ãªããã¹ããŒãªãŒããŒãã®æ¢åã®ãã©ã€ãã³ã³ãããŒã©ãŒã®å·ŠåŽã«ãã©ãã°ã
ãŸã ã
æ°ããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãéžæããåŸã屿§ã€ã³ã¹ãã¯ã¿ãŒãéããæ¬¡ã®å€æŽãè¡ããŸãã
- IdentifierãScheduleã«èšå®ããŸã ã
- [ ã¿ã€ãã«]ã«ã Air Aberããšå
¥åããŸãã
- Is Initial Controllerããã¯ã¹ããã§ãã¯ããŸãã
- [ èªã¿èŸŒã¿æã®ã¢ã¯ãã£ããã£ã€ã³ãžã±ãŒã¿]ãã§ãã¯ããã¯ã¹ããªã³ã«ãªã£ãŠããããšã確èªããŸãã
ãã©ã€ãã³ã³ãããŒã©ãŒãšåæ§ã«ããã®ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã«ã³ãŒãã§ã¢ã¯ã»ã¹ã§ããããã«èå¥åãèšå®ããŸãã ããã¯ãWatchã¢ããªã±ãŒã·ã§ã³ã®å®éã®åæã³ã³ãããŒã©ãŒã§ãããããã¿ã€ãã«ãèšå®ããŠãã§ãã¯ããã¯ã¹ããªã³ã«ããå¿
èŠããããŸãã ãã®ã³ã³ãããŒã©ãŒã¯ãäœããã®ããŒã¿ãœãŒã¹ããããŒãã«ãããŒããããããã¢ã¯ãã£ããã£ã€ã³ãžã±ãŒã¿ãŒã衚瀺ããŸãã
ããã§ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ã«ç§»ããŸãããã
ããŒãã«ããªããžã§ã¯ãã©ã€ãã©ãªããæ°ããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ã«ãã©ãã°ã
ãŸã ã
ããã¥ã¡ã³ãã¢ãŠãã©ã€ã³ã§
ããŒãã«è¡ã³ã³ãããŒã©ãŒãéžæã
ãŸã ã
屿§ã€ã³ã¹ãã¯ã¿ãŒã䜿çšããŠã
èå¥åã FlightRowã«èšå®
ã ãŸã ã èå¥åã¯ãäœæããè¡ã€ã³ã¹ã¿ã³ã¹ãããŒãã«ã«æç€ºãããšãã«è¡ã¿ã€ãã§ããããããååãä»ããããšãéèŠã§ãã
æååã€ã³ã¿ãŒãã§ã€ã¹ã®äœæ
ããŒãã«è¡ã¯å®éã«ã¯ã°ã«ãŒããªã®ã§ãä»»æã®è€éãªæ§æãæå®ã§ããŸãã
æåã®ã¿ã¹ã¯ã¯ãããã©ã«ãã®æ§æã°ã«ãŒãã«2ã€ã®å€æŽãå ããããšã§ãã ããã¥ã¡ã³ãã®ã¢ãŠãã©ã€ã³ã§ãããŒãã«ã®è¡å
ã®ã°ã«ãŒããéžæãã屿§ã€ã³ã¹ãã¯ã¿ãŒã䜿çšããŠã
ééã 6ã« ã
é«ã
ãã³ã³ãã³ãã«åãããŠ
ãµã€ãºã«èšå®ããŸãã
ããã©ã«ãã§ã¯ãããŒãã«è¡ã«ã¯æšæºã®é«ããåºå®ãããŠããŸãã ãã ããã»ãšãã©ã®å Žåã远å ããããã¹ãŠã®ã€ã³ã¿ãŒãã§ã€ã¹ãªããžã§ã¯ãã衚瀺ããããã«ã©ã€ã³ãå¿
èŠãªã®ã§ããã®ããã«
Height屿§ã倿Žãã䟡å€ãåžžã«ãããŸãã
次ã«ããªããžã§ã¯ãã©ã€ãã©ãªããããŒãã«è¡ã°ã«ãŒãã«
ã»ãã¬ãŒã¿ããã©ãã°ããŸãã å®éã«
ã¯äœã
åé¢ããŸããããåã«ããŒãã«ã®è¡ã«å°ããªèŠèŠçãªã¿ãããäžããŸãã ã»ãã¬ãŒã¿ãéžæããåŸã屿§ã€ã³ã¹ãã¯ã¿ãŒã䜿çšããŠæ¬¡ã®å€æŽãè¡ããŸãã
- ColorãïŒFA114F ïŒä»¥åã«äœ¿çšãããAir Aberã®ãã³ã¯è²ïŒã«èšå®ããŸãã
- åçŽæ¹åã®é
眮ãäžå€®ã«èšå®ããŸã ã
- ã³ã³ããã«çžå¯Ÿç㪠é«ãã«èšå®ããŸãã
- 調æŽãâ4ã«èšå®ããŸãã
ã€ã³ã¹ãã¯ã¿ãŒã¯æ¬¡ã®ããã«ãªããŸãã
ããŒãã«ã®åãçªç¶å€§ãããªããç»é¢å
šäœã«è¡šç€ºãããŸããïŒ ããããæååæ§æãæ§æããããã»ã¹ã§ãããä¿®æ£ããŸãã
ã°ã«ãŒãããªããžã§ã¯ãã©ã€ãã©ãªããåºåãæåã®å³åŽã®ããŒãã«è¡ã«ãã©ãã°ããŸãã éžæããã°ã«ãŒãã§ã屿§ã€ã³ã¹ãã¯ã¿ãŒã§æ¬¡ã®å±æ§ã倿ŽããŸãã
- ã¬ã€ã¢ãŠããåçŽã«èšå®ããŸãã
- Spacingã0ã«èšå®ããŸã ã
- ã³ã³ãã³ãã«åãã㊠å¹
ããµã€ãºã«èšå®ããŸãã
ãããããSpacing屿§ãé »ç¹ã«æäœããããšã«æ°ã¥ããã§ãããã ã°ã«ãŒãã®ã€ã³ã¿ãŒãã§ãŒã¹ã®ãªããžã§ã¯ãéã®ã¹ããŒã¹ãåçŽã«çããå°ããªç»é¢ã§ãã¹ãŠãå°ãæç¢ºã«ããŸãã
å¥ã®
ã°ã«ãŒããæ°ãã远å ãã
ã°ã«ãŒãã«ãã©ãã°ããæ¬¡ã®å€æŽãå ããŸãã
- ééã4ã«èšå®ããŸãã
- [ é«ã]ã§ãå€32ã® [ åºå®]ãéžæããŸãã
ããã§ãããŒãã«ã®è¡ãéåžžã®é«ãã«æ»ããŸããïŒ
次ã«ããã®æ°ããã°ã«ãŒãã«
ã©ãã«ãš
ç»åã远å ããŸãã ã©ãã«ãèšå®ããŠããã³ããŒããŠæŽæ°ããåãã©ã€ãã®éå§ç¹ãšçµäºç¹ã衚瀺ããŸãã
次ã«ãç»åã«äœããå
¥ããå¿
èŠããããŸãã
ãã®ç»åãããŠã³ããŒãããŠã
Watch \ Assets.xcassetsã«è¿œå ããŸãã ããã«ãããçŸåšã®ç»åã
2xã¹ããããå ããæ°ãã
å¹³é¢ç»åã®ã»ãããäœæãããŸãã
ãã®ç»åã«Air Aberã®ãã³ã¯è²ãäžãããã®ã§ãç»åãéžæãã屿§ã€ã³ã¹ãã¯ã¿ãŒã䜿çšããŠ
Render Aså€ã
Template Imageã«èšå®ããŸãã
Watch \ Interface.storyboardãå床éããããã¥ã¡ã³ãã¢ãŠãã©ã€ã³ã§ç»åãéžæããŸãã 屿§ã€ã³ã¹ãã¯ã¿ãŒã䜿çšããŠã次ã®å€æŽãè¡ããŸãã
- ImageãPlaneã«èšå®ããŸãã
- TintãïŒFA114Fã«èšå®ããŸãã
- æ°Žå¹³ããã³åçŽæ¹åã®é
眮ãCenterã«èšå®ããŸãã
- [ å¹
]ã§ãå€ã24ã® [ åºå® ]ãªãã·ã§ã³ãéžæããŸãã
- [ é«ã ]ã§ãå€20ã® [ åºå® ]ãªãã·ã§ã³ãéžæããŸãã
ã©ãã«ãéžæãããã®
ããã¹ããã£ãŒã«ãã
MELã«èšå®ããŸãã æ¬¡ã«ã
ãã©ã³ãã
ã·ã¹ãã ã«å€æŽãã
ã»ãããŒã«ãã¹ã¿ã€ã«ãšãµã€ãº
20ã«ããŸãã æåŸã«ã
åçŽæ¹åã®é
眮ã
Centerã«èšå®ã
ãŸã ã
ã©ãã«ãã³ããŒããŠãç»åã®å³åŽã«è²Œãä»ããŸãã ããã¹ãã
SFOã«å€æŽãã
æ°Žå¹³é
眮ã
å³ã«å€æŽããŸãã ããŒãã«è¡ã¯æ¬¡ã®ããã«ãªããŸãã
泚ïŒã©ãã«ã®ã³ããŒãæ¿å
¥ãããšãããã¥ã¡ã³ãã¢ãŠãã©ã€ã³å
ã®äœçœ®ã«é¢ä¿ãªããã©ãã«ãç»åã®å·ŠåŽã«è²Œãä»ããããããšããããŸãããã ããæ°Žå¹³æ¹åã®é
眮ãå³ã«èšå®ãããšãæå®ã®äœçœ®ã«ç§»åããŸããã€ã³ã¿ãŒãã§ã€ã¹ãªããžã§ã¯ãã®éå±€ã¯æ¬¡ã®ããã«ãªããŸããããŒãã«è¡ã€ã³ã¿ãŒãã§ã€ã¹ã¯ã»ãŒå®æããŸããããã©ã€ãçªå·ãšã¹ããŒã¿ã¹ã®ã¿ã远å ããŸããå¥ã®ã°ã«ãŒãããªããžã§ã¯ãã©ã€ãã©ãªããããŒãã«ã®è¡ã«ãã©ãã°ããŠãåºçºã©ãã«ãšå°çã©ãã«ãå«ãã°ã«ãŒãã®é£ã«é
眮ããŸãããã®ã€ã³ã¿ãŒãã§ã€ã¹ã®äœæãç¶ãããšãè€éãªæ§æãäœæããããã«ãæ§æãæ··åšããçµã¿èŸŒã¿ã°ã«ãŒãã䜿çšããæ¹æ³ã®ä»ã®äŸã衚瀺ãããŸãããã®èªåã¬ã€ã¢ãŠããå¿
èŠãªã®ã¯èª°ã§ããïŒïŒãã®æ°ããæ°Žå¹³ã°ã«ãŒãã«2ã€ã®ã©ãã«ããã©ãã°ããŸãã屿§ã€ã³ã¹ãã¯ã¿ãŒã䜿çšããŠãå·ŠåŽã®ã©ãã«ã倿ŽããŸãã- TextãAA123ã«èšå®ããŸãã
- ããã¹ãã®è²ãæããç°è²ã«èšå®ããŸãã
- ãã©ã³ãããã£ãã·ã§ã³2ã«èšå®ããŸãã
- Vertical AlignmentãBottomã«èšå®ããŸãã
次ã«ãé©åãªã©ãã«ã倿ŽããŸãã- TextãOn timeã«èšå®ããŸãã
- ããã¹ãã®è²ãïŒ04DE71ã«èšå®ããŸãã
- ãã©ã³ãããã£ãã·ã§ã³2ã«èšå®ããŸãã
- Horizoâântal AlignmentãRightã«èšå®ããŸãã
- Vertical AlignmentãBottomã«èšå®ããŸãã
ãããã®æåŸã®å€æŽãè¡ã£ãåŸãããŒãã«ã®å®æããè¡ã¯æ¬¡ã®ããã«ãªããŸããInterface Builderã§ããŒãã«ãèšå®ããããããã€ãã®ããŒã¿ãå
¥åããããšãã§ããŸããããŒãã«å
å¡«
æåã«è¡ãããšã¯WKInterfaceController
ãããŒãã«ã管çããã¯ã©ã¹ã®ãµãã¯ã©ã¹ãäœæããããšã§ããã°ã«ãŒããå³ã¯ãªãã¯ããŠã©ããæ¡åŒµãããžã§ã¯ãããã²ãŒã¿ã§ãéžæãæ°èŠ...ãã¡ã€ã«ãã衚瀺ããããã€ã¢ãã°ã§ãwatchOS \ Source \ WatchKit ClassãéžæããNextãã¯ãªãã¯ããŸããæ°ããã¯ã©ã¹ã«ScheduleInterfaceControllerãšããååãä»ããŸããWKInterfaceControllerã®ãµãã¯ã©ã¹ã§ãããèšèªãSwiftã«èšå®ãããŠããããšã確èªããŸãã[ 次ãž]ã[ äœæ]ã®é ã«ã¯ãªãã¯ããŸããã³ãŒããšãã£ã¿ãŒã§æ°ãããã¡ã€ã«ãéããããã€ã³ããŒãã¹ããŒãã¡ã³ããšã¯ã©ã¹å®çŸ©ã®ã¿ãæ®ãããã«ã3ã€ã®ç©ºã®ã¡ãœãããã©ã³ã¯ãåé€ããŸããWatch \ Interface.storyboardãå床éããæ°ããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãéžæããŸããIdentityã€ã³ã¹ãã¯ã¿ãŒã§ãCustom Class \ ClassãScheduleInterfaceControllerã«çœ®ãæããŸããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãéžæãããŸãŸãã¢ã·ã¹ã¿ã³ããšãã£ã¿ãŒãéããããã«è¡šç€ºãããŠããããšã確èªããŸãScheduleInterfaceController
ãæ¬¡ã«ãControlããŒãæŒããªãããããŒãã«ããããã¥ã¡ã³ãã®ã¢ãŠãã©ã€ã³ã«ã¯ã©ã¹å®çŸ©ScheduleInterfaceController
ã«ãã©ãã°ããŠãOutletãã£ãŒã«ããäœæããŸããã³ãŒã«ã¢ãŠãã¬ããã·ã§ããã³ã°flightsTableã¯ããããã¿ã€ãã«èšå®ãããŠããããšã確èªãWKInterfaceTableãã¯ãªãã¯ããæ¥ç¶ããç¬èªã®ã¯ã©ã¹ãèšå®ããããŒãã«ã«Outletãäœæããã®ã§ããããèšå®ããŸããã¢ã·ã¹ã¿ã³ããšãã£ã¿ãŒãéããScheduleInterfaceController.swiftãéããã¢ãŠãã¬ããã®çŽåŸã«æ¬¡ã®è¡ã远å ããŸãã var flights = Flight.allFlights()
ããã§ã¯ããã¹ãŠã®ãã©ã€ãæ
å ±ãå«ãããããã£ãã€ã³ã¹ã¿ã³ã¹ã®é
åãšããŠè¿œå ããã ãFlight
ã§ããæ¬¡ã«ã次ã®å®è£
ã远å ããŸãawake(withContext:)
ã override func awake(withContext context: Any?) { super.awake(withContext: context) flightsTable.setNumberOfRows(flights.count, withRowType: "FlightRow") }
ããã§ãã®åãã©ã€ãã«å¯ŸããŠInterface Builderã§äœæããè¡ãã€ã³ã¹ã¿ã³ã¹åããå¿
èŠãããããšãããŒãã«ã«éç¥ããŸãflights
ãè¡æ°ã¯é
åã®ãµã€ãºã«çãããè¡ã¿ã€ãã¯ã¹ããŒãªãŒããŒãã§èšå®ããèå¥åã§ããã¢ããªã±ãŒã·ã§ã³ããã«ãããŠå®è¡ããŸããããã€ãã®è¡ã§æºããããããŒãã«ã衚瀺ãããŸããåè¡ã®é£ã«ã¯ããšã¢ã¢ããŒã®é£è¡æ©ã®ãã³ã¯ã®ç»åããããŸããããããã¡ãã£ãšåŸ
ã£ãŠãã ããïŒ
ã¿ã€ãã«ã¯ãããããã³ã¯ã®ã³ãŒãã¬ãŒãã«ã©ãŒã§ããAir Aberã§ã¯ãªããããŒã¯ã°ã¬ãŒã§ããä»ãããä¿®æ£ããŸããWatch \ Interface.storyboardãéããAir Aberã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãéžæããŸãããã¡ã€ã«ã€ã³ã¹ãã¯ã¿ã§ãã°ããŒãã«ãã£ã³ããïŒFA114Fã«å€æŽããŸããã¢ããªã±ãŒã·ã§ã³ããã«ãããŠå®è¡ããŸããããã¯è¯ãã§ãïŒããããä»ã§ã¯ãã¹ãŠã®è¡ã«ãInterface Builderã§èšå®ãããã¬ãŒã¹ãã«ããŒããã¹ãã衚瀺ãããŠããããšãããããŸããæ¬¡ã«ãè¡ããšã«ã©ãã«ãèšå®ããè¡ã³ã³ãããŒã©ãŒã远å ããŠããããä¿®æ£ããŸããè¡ã³ã³ãããŒã©ãŒã®è¿œå
WatchKitããŒãã«ã¯iOSããŒãã«ãããã¯ããã«åçŽã§ããããã«ã¯ããŒã¿ãœãŒã¹ãããªã²ãŒãã¯ãããŸãããè¡ã³ã³ãããŒã©ãŒã¯ã©ã¹ãäœæããã ãã§ããããã¯ãååã«ãããããããã¯ã©ã¹ã®ãµãã¯ã©ã¹ã§ãNSObject
ãã°ã«ãŒããå³ã¯ãªãã¯ããŠã©ããæ¡åŒµãããžã§ã¯ãããã²ãŒã¿ã§ãéžæãæ°èŠ...ãã¡ã€ã«ããéãããã€ã¢ãã°ããã¯ã¹ã§ãwatchOS \ Source \ WatchKit ClassãéžæããNextãã¯ãªãã¯ããŸããæ°ããã¯ã©ã¹ã«FlightRowControllerãšããååãä»ããŸããããã¯ã®ãµãã¯ã©ã¹ã§ããããšã確èªãNSObjectã®ã -ããã³ãªã WKInterfaceControllerïŒ -ãããŠããã®èšèªã¯SwiftãéèŠã§ãïŒ[ 次ãž]ã[ äœæ]ã®é ã«ã¯ãªãã¯ããŸããã³ãŒããšãã£ã¿ã§æ°ãããã¡ã€ã«ãéããããã¯ã©ã¹ã®å
é ã«æ¬¡ã®è¡ã远å ããŸãã @IBOutlet var separator: WKInterfaceSeparator! @IBOutlet var originLabel: WKInterfaceLabel! @IBOutlet var destinationLabel: WKInterfaceLabel! @IBOutlet var flightNumberLabel: WKInterfaceLabel! @IBOutlet var statusLabel: WKInterfaceLabel! @IBOutlet var planeImage: WKInterfaceImage!
ããã§ã¯ãããŒãã«è¡ã«è¿œå ãããåã©ãã«ã«ã¢ãŠãã¬ããã远å ããã ãã§ããéããªãæ¥ç¶ããŸããæ¬¡ã«ãã¢ãŠãã¬ãããã£ãŒã«ãã®ããäžã«ã次ã®ããããã£ãšããããã£ãªãã¶ãŒããŒã远å ããŸãã // 1 var flight: Flight? { // 2 didSet { // 3 guard let flight = flight else { return } // 4 originLabel.setText(flight.origin) destinationLabel.setText(flight.destination) flightNumberLabel.setText(flight.number) // 5 if flight.onSchedule { statusLabel.setText("On Time") } else { statusLabel.setText("Delayed") statusLabel.setTextColor(.red) } } }
åæ®µéã§äœãèµ·ããããæ¬¡ã«ç€ºããŸãã- åã®è£å©ããããã£ã宣èšããŸã
Flight
ããã®ã¯ã©ã¹ã¯Flight.swiftã§å®£èšãããŠããŸããããã¯ããã¥ãŒããªã¢ã«ã®åã®éšåã§Watch Extensionã«è¿œå ãããäžè¬çãªã³ãŒãã®äžéšã§ãã - ããããã£ãèšå®ããããšãã«å®è¡ãããããããã£ãªãã¶ãŒãã远å ããŸãã
- ,
flight
nil
: , Flight
. flight
.- , .
è¡ã³ã³ãããŒã©ãŒã®æ§æãå®äºããããããã䜿çšããããã«ããŒãã«ã®è¡ãæŽæ°ããå¿
èŠããããŸããWatch \ Interface.storyboardãéããããã¥ã¡ã³ãã¢ãŠãã©ã€ã³ã§FlightRowãéžæããŸãã Identityã€ã³ã¹ãã¯ã¿ãŒã䜿çšããŠãCustom Class \ ClassãFlightRowControllerã«èšå®ããŸããããã¥ã¡ã³ãã¢ãŠãã©ã€ã³ããã¹ãŠã®ã°ã«ãŒããéãFlightRowããã®åŸãå³ã¯ãªãã¯FlightRowã¢ã¯ã·ã§ã³ã®ãããã¢ãããŠã£ã³ããŠãã¢ãŠãã¬ããã®ãã£ãŒã«ããåŒãèµ·ããããã«ãïŒãã®ãããã¢ãããå³ã«ãã©ãã°ããŠãFlightRowã®ãã¹ãŠã®ãªããžã§ã¯ãã衚瀺ã§ããŸãããŸããplaneImage
ããŒãã«ã®è¡ã®ç»åãšseparator
ã»ãã¬ãŒã¿ãŒã«æ¥ç¶ããŸããæ¬¡ã«ã以äžã®ãªã¹ãã«åŸã£ãŠãæ®ãã®ã¢ãŠãã¬ãããã£ãŒã«ããæ¥ç¶ããŸããdestinationLabel
ïŒSFOflightNumberLabel
ïŒAA123originLabel
ïŒMELstatusLabel
ïŒæééã
æåŸã®æé ã¯ãããŒãã«å
ã®åè¡ã³ã³ãããŒã©ãŒã«ScheduleInterfaceController
ã€ã³ã¹ã¿ã³ã¹ãæž¡ãããã«æŽæ°ããããšFlight
ã§ããScheduleInterfaceController.swiftãéããæ¬¡ã®è¡ã远å ããŸããawakeWithContext(_:)
for index in 0..<flightsTable.numberOfRows { guard let controller = flightsTable.rowController(at: index) as? FlightRowController else { continue } controller.flight = flights[index] }
ããfor
ã§ãããŒãã«å
ã®åè¡ãã«ãŒããã察å¿ããã€ã³ããã¯ã¹ã䜿çšããŠè¡ã³ã³ãããŒã©ãŒã®ããŒãã«ãç
§äŒããŸããã³ã³ãããŒã©ãŒãæ£ãããªã¯ãšã¹ããããšãã€ã³ã¹ã¿ã³ã¹ãååŸãããŸãFlightRowController
ãæ¬¡ã«ãcontroller.flight
察å¿ããèŠçŽ flight
ãé
åã«èšå®ãflights
ãŸããããã«ããããªãã¶ãŒããŒãå®è¡didSet
ãFlightRowController
ããããŒãã«è¡ã®ãã¹ãŠã®ã©ãã«ãèšå®ãããŸããäœæ¥ã®çµæã確èªãããšãã§ããã¢ããªã±ãŒã·ã§ã³ããã«ãããŠå®è¡ããŸããããŒãã«è¡ã«æ£ãããã©ã€ãæ
å ±ãå
¥åãããŠããããšãããããŸãããããŠä»ããã¥ãŒããªã¢ã«ã®ãã®éšåã®æåŸã®ã¿ã¹ã¯ïŒãŠãŒã¶ãŒãããŒãã«ã®è¡ãã¿ãããããšScheduleInterfaceController
ã察å¿ãããã©ã€ããã³ã³ããã¹ããšããŠããã¥ãŒããªã¢ã«ã®åã®éšåã§äœæãããã©ã€ãæ
å ±ã€ã³ã¿ãŒãã§ã€ã¹ã«è»¢éãã衚瀺ããå¿
èŠããããŸããéžæããæååã«äžèŽ
æåã«è¡ãããšã¯WKInterfaceTable
ãããŒãã«è¡ãéžæããåŠçãå®è¡ããã¡ãœããããªãŒããŒã©ã€ãããããšã§ããæ¬¡ã®è¡ã«è¿œå ãScheduleInterfaceController
ãŸãã override func table(_ table: WKInterfaceTable, didSelectRowAt rowIndex: Int) { let flight = flights[rowIndex] presentController(withName: "Flight", context: flight) }
ããã§ã¯flights
ããã®ã¡ãœããã«æž¡ãããè¡ã€ã³ããã¯ã¹ã䜿çšããŠã察å¿ãããã©ã€ãããååŸããŸããæ¬¡ã«ãcontext
éä¿¡ã®å質ã§ããã©ã€ãã®è©³çްã€ã³ã¿ãŒãã§ã€ã¹ã衚瀺ããŸãflight
ãæž¡ãããååpresentController(withName:context:)
ã¯ããã¥ãŒããªã¢ã«ã®åã®éšåã§ã¹ããŒãªãŒããŒãã«èšå®ããèå¥åã§ããããŠãæåã®éšåã§çŽæããããã«ãFlightInterfaceController
ããcontext
ã䜿çšããŠã€ã³ã¿ãŒãã§ãŒã¹ãæ§æããããã«å€æŽããŸããFlightInterfaceController.swiftãéãããèŠã€ããŸãããã®è¡ãèŠã€ããŸãïŒawake(withContext:)
flight = Flight.allFlights().first
次ã®è¡ã«çœ®ãæããŸãã if let flight = context as? Flight { self.flight = flight }
ããã§ã¯context
ãã€ã³ã¹ã¿ã³ã¹ãšããŠå€æããããšããŠããŸãFlight
ããããæåããå Žåããããjob self.flight
ã«äœ¿çšããŸããããã«ãããããããã£ãªãã¶ãŒããŒãå®è¡ãããã€ã³ã¿ãŒãã§ã€ã¹ãæ§æãããŸãããã®ããŒãã§ã¯ãæåŸã«ã¢ããªã±ãŒã·ã§ã³ããã«ãããŠå®è¡ããŸãã衚ã®è¡ãã¿ãããããšãéžæããããã©ã€ãã«é¢ããæ
å ±ãšãšãã«ããã©ã€ãæ
å ±ã€ã³ã¿ãŒãã§ãŒã¹ãã¢ãŒãã«ã§ã©ã®ããã«è¡šç€ºãããããããããŸããããã§ãšãããããŸãïŒ
æåã®ããŒãã«ã®å®è£
ãå®äºããå®éã®ããŒã¿ãå
¥åãããŸããã çŽ æŽãããä»äºã§ãïŒ
ããã§ãããžã§ã¯ãã®æºåãã§ããŠäŸæã
ã¯ããã®ãã¥ãŒããªã¢ã«ã§ã¯ããããŸã§è¡ãããŠããããšãããŒã3ïŒã¢ãã¡ãŒã·ã§ã³
ãã¥ãŒããªã¢ã«ã®ç¬¬3éšã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®äŸãšããŠãæ°ãããã©ã€ãç»é²ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠwatchOS 4ã¢ãã¡ãŒã·ã§ã³ã䜿çšããæ¹æ³ãåŠç¿ããŸãããã®éçšã§ã次ã®ããšãåŠã³ãŸãã- ç»åã«åºã¥ããŠã¢ãã¡ãŒã·ã§ã³ãäœæããæ¹æ³ã
- watchOS 4ã¢ãã¡ãŒã·ã§ã³APIã®äœ¿ç𿹿³ã
ä»äºãå§ãã
Watch \ Interface.storyboardãéããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒããªããžã§ã¯ãã©ã€ãã©ãªããã¹ããŒãªãŒããŒããã£ã³ãã¹ã«ãã©ãã°ããŸããã³ã³ãããŒã©ã€ã³ã¿ãŒãã§ã€ã¹ãéžæããåŸã屿§ã€ã³ã¹ãã¯ã¿ãéããã«å
¥åããèå¥åå€ãã§ãã¯ã€ã³ããããå®è¡ããŠãããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãå®çŸ©ã§ããããã«ããŸããScheduleInterfaceController
ãæ¬¡ã«ããªããžã§ã¯ãã©ã€ãã©ãªã°ã«ãŒãããæ°ããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã«ãã©ãã°ããŸãã屿§ã€ã³ã¹ãã¯ã¿ãŒã§ã次ã®å€æŽãè¡ããŸãã- [ ã¬ã€ã¢ãŠã]ã[ åçŽ]ã«èšå®ããŸãã
- ModeãCenterã«èšå®ããŸãã
- Horizoâântal AlignmentãCenterã«èšå®ããŸãã
- ã³ã³ããã«çžå¯Ÿçãªé«ãã«èšå®ããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã¯æ¬¡ã®ããã«ãªããŸããæ¬¡ã«ãããŒãã«è¡çšã«äœæããlabel-image-labelããåãã°ã«ãŒããäœæããŸããå¥ã®ã°ã«ãŒããäœæããã°ã«ãŒãã«ãã©ãã°ãã屿§ã€ã³ã¹ãã¯ã¿ãŒã«æ¬¡ã®å€æŽãå ããŸãã- Spacingã4ã«èšå®ããŸãã
- Horizoâântal AlignmentãCenterã«èšå®ããŸãã
- ã³ã³ãã³ãã«åãããŠå¹
ããµã€ãºã«èšå®ããŸãã
- 30ã®å€ïŒããŒãã«è¡ããå°ãçãïŒã§[ é«ã ]ãªãã·ã§ã³[ åºå® ]ãéžæããŸãã
ãã®æ°ããã°ã«ãŒãã«ã©ãã«ãšç»åã远å ããŸããã©ãã«ãèšå®ããŠããã³ããŒããŠæŽæ°ããåãã©ã€ãã®éå§ç¹ãšçµäºç¹ã衚瀺ããŸããã¹ããŒãªãŒããŒããŸãã¯ããã¥ã¡ã³ãã®ã¢ãŠãã©ã€ã³ã§ç»åãéžæããŸãã屿§ã€ã³ã¹ãã¯ã¿ãŒã§ã次ã®å€æŽãè¡ããŸãã- ImageãPlaneã«èšå®ããŸãã
- TintãïŒFA114Fã«èšå®ããŸãïŒããããã³ã¯è²ã§ãïŒïŒã
- åçŽæ¹åã®é
眮ãäžå€®ã«èšå®ããŸãã
- 24ã®å€ã§[ å¹
]ãªãã·ã§ã³[ åºå® ]ãéžæããŸãã
- Height Fixed 20 .
åãšåæ§ã«ãç»åã¯è²çžã倿Žããªããããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã®é»ãèæ¯ã«ã¯è¡šç€ºãããŸãããããããç§ãã¡ã¯ãããããã«ããããšãç¥ã£ãŠããŸããã©ãã«ãéžæããããã¹ãå€ãMELã«èšå®ããŸããæ¬¡ã«ããã©ã³ããã·ã¹ãã ã«å€æŽããã»ãããŒã«ãã¹ã¿ã€ã«ãšãµã€ãº20ã«ããŸããæåŸã«ãåçŽæ¹åã®é
眮ãCenterã«èšå®ããå¹
ãšé«ããã³ã³ãã³ãã«åãããŠãµã€ãºã«èšå®ãããŠããããšã確èªããŸããã©ãã«ãã³ããŒããŠãç»åã®æšªã«è²Œãä»ããŸããããã¹ããSFOã«ãæ°Žå¹³æ¹åã®é
眮ãå³ãã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã¯æ¬¡ã®ããã«ãªããŸããããã巚倧ãªç»é²ãã¿ã³ã远å ããŸãããïŒç»é²ãã¿ã³ã远å
ãã¿ã³ããªããžã§ã¯ãã©ã€ãã©ãªããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã«ãã©ãã°ãããã©ã€ãã®éå§ç¹ãšçµäºç¹ã®ã©ãã«ãå«ãã°ã«ãŒãã«é£æ¥ããèŠçŽ ã§ããããšã確èªããŸããWatchKitã®ãã¿ã³ã¯éåžžã«æè»ã§ããããã©ã«ãã®å€èгïŒä»è¿œå ãããããªå€èгïŒã§äœ¿çšããããã¬ã€ã¢ãŠãã°ã«ãŒãã«å€ããŠä»ã®ã€ã³ã¿ãŒãã§ã€ã¹ãªããžã§ã¯ãã远å ããŠå€èгãã«ã¹ã¿ãã€ãºãããã§ããŸãããããç§ãã¡ã®ããããšã§ãããã¿ã³ãéžæãã屿§ã€ã³ã¹ãã¯ã¿ãŒã«æ¬¡ã®å€æŽãå ããŸãã- ã³ã³ãã³ããã°ã«ãŒãã«èšå®ããŸãã
- Horizoâântal AlignmentãCenterã«èšå®ããŸãã
- åçŽæ¹åã®é
眮ãäžå€®ã«èšå®ããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã¯æ¬¡ã®ããã«ãªããŸãããã¿ã³ã®ã³ã³ãã³ã屿§ã倿Žãããšãããã¥ã¡ã³ãã¢ãŠãã©ã€ã³ã«æ°ããã°ã«ãŒãã衚瀺ãããããšã«æ°ã¥ããã§ããããç¬èªã®ç»é²ãã¿ã³ã®èæ¯ãšããŠäœ¿çšããŸãããã®ã°ã«ãŒããéžæãã屿§ã€ã³ã¹ãã¯ã¿ãŒã«æ¬¡ã®å€æŽãå ããŸãã- [ è²]ãïŒFA114Fã«èšå®ããŸãã
- ååŸã39ã«èšå®ããŸãã
- 78ã®å€ã§[ å¹
]ãªãã·ã§ã³[ åºå® ]ãéžæããŸãã
- 78ã®å€ã§[ é«ããåºå®]ãéžæããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã¯æ¬¡ã®ããã«ãªããŸããç»é²ãã¿ã³ã¯ãã§ã«ãã®åœ¢ãåãå§ããŠããŸããäžè¶³ããŠããã®ã¯ã©ãã«ã ããªã®ã§ãããã§è¿œå ããŸãããªããžã§ã¯ãã©ã€ãã©ãªãããã¿ã³ã«å±ããã°ã«ãŒãã«ã©ãã«ããã©ãã°ããéžæããŸããæ¬¡ã®å€æŽãååºŠå±æ§ã€ã³ã¹ãã¯ã¿ãŒã«ããŸãã- TextãCheck Inã«èšå®ããŸãã
- ãã©ã³ããã·ã¹ãã ã«èšå®ããã»ãããŒã«ãã¹ã¿ã€ã«ãšãµã€ãº16ã«ããŸãã
- Horizoâântal AlignmentãCenterã«èšå®ããŸãã
- åçŽæ¹åã®é
眮ãäžå€®ã«èšå®ããŸãã
ç»é²ã€ã³ã¿ãŒãã§ãŒã¹ã®å®æããã³ã³ãããŒã©ãŒã¯æ¬¡ã®ããã«ãªããŸããã€ã³ã¿ãŒãã§ãŒã¹ã宿ããããWKInterfaceController
ãã®ã³ã³ãããŒã©ãŒãå¶åŸ¡ãããµãã¯ã©ã¹ã®äœæã«é²ã¿ScheduleInterfaceController
ã衚瀺ããããã«å€æŽããŸããã³ã³ãããŒã©ãŒã®äœæ
ã°ã«ãŒããå³ã¯ãªãã¯ããŠã©ããæ¡åŒµãããžã§ã¯ãããã²ãŒã¿ã§ãéžæãæ°èŠ...ãã¡ã€ã«ãã衚瀺ããããã€ã¢ãã°ã§ãwatchOS \ Source \ WatchKit ClassãéžæããNextãã¯ãªãã¯ããŸããæ°ããã¯ã©ã¹ã«CheckInInterfaceControllerãšããååãä»ãããããWKInterfaceControllerã®ãµãã¯ã©ã¹ã§ãããSwiftãLanguageã«éžæãããŠããããšã確èªããŸãã[ 次ãž]ã[ äœæ]ã®é ã«ã¯ãªãã¯ããŸããã³ãŒããšãã£ã¿ãŒã§æ°ãããã¡ã€ã«ãéããããã€ã³ããŒãã¹ããŒãã¡ã³ããšã¯ã©ã¹å®çŸ©ã®ã¿ãå«ãŸããããã«ã3ã€ã®ç©ºã®ã¡ãœãããã©ã³ã¯ãåé€ããŸããæ¬¡ã«ãã¯ã©ã¹ã®äžéšã«æ¬¡ã®è¡ã远å ããŸãã @IBOutlet var backgroundGroup: WKInterfaceGroup! @IBOutlet var originLabel: WKInterfaceLabel! @IBOutlet var destinationLabel: WKInterfaceLabel!
ããã§ã¯ãæãå€åŽã®ã°ã«ãŒãã®ã¢ãŠãã¬ãããã£ãŒã«ããšãäœæãã2ã€ã®ã€ã³ã¿ãŒãã§ã€ã¹ã©ãã«ã远å ããŸããããã«ããããã¹ãŠãæ¥ç¶ããŸããæ¬¡ã«ã[ã¢ãŠãã¬ãã]ãã£ãŒã«ãã®äžã«æ¬¡ã远å ããŸãã var flight: Flight? { didSet { guard let flight = flight else { return } originLabel.setText(flight.origin) destinationLabel.setText(flight.destination) } }
ããFlight
ã§ã¯ãããããã£ãªãã¶ãŒããŒãå«ãè£å©åããããã£ã远å ããŸããããªãã¶ãŒããŒã¯ãå®è¡æã«ããã©ãããŒãåé€ããããšãflight
ãæåããå Žåã¯ãflight
2ã€ã®ã©ãã«ã䜿çšããŠæ§æããŸããããã¯ãã¹ãŠç§ãã¡ã«ãã§ã«ããç¥ãããŠããŸããããflight
ã§ãã³ã³ãããŒã©ãŒããããã©ãããèšå®ããã ãã§ããCheckInInterfaceController
次ã®è¡ã«è¿œå ããŸãã override func awake(withContext context: Any?) { super.awake(withContext: context) if let flight = context as? Flight { self.flight = flight } }
ããªãã¯ãã§ã«ããã«ç²ŸéããŠããŸããã©ãããŒãåé€ãcontext
ãŠãã€ã³ã¹ã¿ã³ã¹ã«å€æããããšããŠããŸãFlight
ããããæåããå Žåãã¿ã¹ã¯ã«äœ¿çšãself.flight
ãããããã£ãªãã¶ãŒããå®è¡ããŠãã€ã³ã¿ãŒãã§ã€ã¹ãèšå®ããŸããæåŸã«ãawake(withContext:)
次ã®ã¢ã¯ã·ã§ã³ã®ããäžã«è¿œå ããŸãã @IBAction func checkInButtonTapped() { // 1 let duration = 0.35 let delay = DispatchTime.now() + (duration + 0.15) // 2 backgroundGroup.setBackgroundImageNamed("Progress") // 3 backgroundGroup.startAnimatingWithImages(in: NSRange(location: 0, length: 10), duration: duration, repeatCount: 1) // 4 DispatchQueue.main.asyncAfter(deadline: delay) { [weak self] in // 5 self?.flight?.checkedIn = true self?.dismiss() } }
ããã§ãåã¹ãããã§äœãèµ·ãããã瀺ããŸãã- 2ã€ã®å®æ°ãäœæããŸãã1ã€ã¯ã¢ãã¡ãŒã·ã§ã³ã®ç¶ç¶æéçšããã1ã€ã¯é
å»¶çšã§ããã®åŸã³ã³ãããŒã©ãŒããªãã«ãªããŸãã
delay
-ããã¯Double
ã€ã³ã¹ã¿ã³ã¹DispatchTime
ã§ã¯ãªããGrand Central Dispatchã§äœ¿çšããããã§ãã - Progress
backgroundGroup
. WKImageAnimatable
, . - . ,
repeatCount
, 1, , . - WatchKit , Grand Central Dispatch .
- ,
flight
, .
ããã§ããããžã§ã¯ãã«ç»åã远å ããã¢ãŠãã¬ãããš1ã€ã®ã¢ã¯ã·ã§ã³ãæ¥ç¶ããã ãã§ãããã®zipãã¡ã€ã«ãããŠã³ããŒãããŠè§£åãããã©ã«ããŒãWatch \ Assets.xcassetsã«ãã©ãã°ããŸããå
容ã§ã¯ãªããã©ã«ãããã©ãã°ã¢ã³ãããããããŸããããã«ãããProgressãšããååã®ãªãœãŒã¹ãã£ã¬ã¯ããªã«ã°ã«ãŒããäœæãããããã€ãã®ç»åã»ãããå«ãŸããŸããç»åã远å ããããšã§ãã¢ãŠãã¬ãããã£ãŒã«ããšãã¿ã³ã¢ã¯ã·ã§ã³ãå²ãåœãŠãããšãã§ããŸããWatch \ Interface.storyboardãéããæ°ããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãéžæããŸããIdentityã€ã³ã¹ãã¯ã¿ãŒã§ãCustom Class \ ClassãCheckInInterfaceControllerã«çœ®ãæããŸããæ¬¡ã«ãããã¥ã¡ã³ãã¢ãŠãã©ã€ã³ã§CheckInãå³ã¯ãªãã¯ããŠãã¢ãŠãã¬ãããã£ãŒã«ããšã¢ã¯ã·ã§ã³ã衚瀺ããŸããbackgroundGroup
ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã®æãå€åŽã®ã°ã«ãŒãã«æ¥ç¶ããŸããã¹ããŒãªãŒããŒããã£ã³ãã¹ã§destinationLabel
ãSFOãoriginLabel
å«ãã©ãã«ã«æ¥ç¶ããMELãå«ãã©ãã«ã«æ¥ç¶ããŸããæ¬¡ã«checkInButtonTapped
ã倧ããªäžžããã³ã¯ã®ãã¿ã³ã«æ¥ç¶ããŸããã¢ããªã±ãŒã·ã§ã³ããã«ãããŠå®è¡ããåã«ãæåŸã®å€æŽãã€ãŸãã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã®è¡šç€ºãè¡ãå¿
èŠããããŸããã³ã³ãããŒã©ãŒã®ãããã³ã°
ScheduleInterfaceController.swiftãéããtable(_:didSelectRowAt:)
ãã®å
容ãèŠã€ããŠæ¬¡ã®è¡ã«çœ®ãæããŸãã let flight = flights[rowIndex] let controllers = ["Flight", "CheckIn"] presentController(withNames: controllers, contexts: [flight, flight])
ããflights
ã§ãã€ã³ããã¯ã¹rowIndex
ã䜿çšããŠå¯Ÿå¿ãããã©ã€ããååŸãã衚瀺ãã2ã€ã®ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã®èå¥åãå«ãé
åãäœæãããããã衚瀺ããŠãäž¡æ¹ãflight
quality ã§æž¡ããŸãcontext
ãã¢ããªã±ãŒã·ã§ã³ããã«ãããŠå®è¡ããŸãããã©ã€ããã¿ãããããšã衚瀺ãããŠããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒãããã€ã衚瀺ãããŸããå·Šã«ã¹ã¯ã€ãããŠç»é²ã³ã³ãããŒã©ãŒãéãããã¿ã³ãã¿ããããŠã¢ãã¡ãŒã·ã§ã³ãéå§ããŠç»é²ããŸããããã¯ããèªäœã§çŽ æŽãããããã«èŠããŸããããã§ãã¯ã€ã³ãããŠãããã©ã€ããã¹ã±ãžã¥ãŒã«ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã§åŒ·èª¿è¡šç€ºãããŠããæ¹ãè¯ãã§ããããã¯ãæ¬¡ã®æåŸã®ã»ã¯ã·ã§ã³ã§è¡ããŸãããã©ã€ããã€ã©ã€ã
FlightRowController.swiftãéããæ¬¡ã®ã¡ãœããã远å ããŸãã func updateForCheckIn() { let color = UIColor(red: 90/255, green: 200/255, blue: 250/255, alpha: 1) planeImage.setTintColor(color) separator.setColor(color) }
ããã§ã¯ãã€ã³ã¹ã¿ã³ã¹ãäœæãUIColor
ããããããè²èª¿ãè²ãèšå®ããããã«ããã䜿çšãããã®åŸãplaneImage
ãšseparator
ããã®ã¡ãœããã¯ãã¢ãã¡ãŒã·ã§ã³ãéãããšãã«åŒã³åºããããããè²ã®å€åãçŸããã¢ãã¡ãŒã·ã§ã³åãããŸããæ¬¡ã«ãScheduleInterfaceController.swiftãéããflights
次ã®ããããã£ã远å ããŸãã var selectedIndex = 0
2ã€ã®ã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ãããŒã©ãŒã衚瀺ãããšãã«ãããŒãã«ã®ã©ã®è¡ãéžæãããŠããããèšæ¶ããããã«äœ¿çšããŸããããã§ã衚ã®è¡ãéžæãããšãã«èšå®ããã ãã§ååã§ããçŽæ¥åŒã³åºãã®äžã«æ¬¡ã®è¡ã远å presentController(withNames:contexts:)
ããŸãtable(_:didSelectRowAt:)
ïŒ selectedIndex = rowIndex
ãã®è¡ã¯selectedIndex
ãããŒãã«å
ã®éžæãããè¡ã®ã€ã³ããã¯ã¹å€ãèšå®ããŸããæåŸã«ã次ã®è¡ãã®ScheduleInterfaceController
ããäžã«è¿œå ããŸãawake(withContext:)
ã override func didAppear() { super.didAppear()
åæ®µéã§äœãèµ·ããããæ¬¡ã«ç€ºããŸãã- éžæãããã©ã€ãã®ãã§ãã¯ã€ã³ãå®äºããŠãããã©ããã確èªããŠãã ããããããããªããããŒãã«å
ã®å¯Ÿå¿ããã€ã³ããã¯ã¹ãæã€è¡ã³ã³ãããŒã©ãã€ã³ã¹ã¿ã³ã¹ã«å€æããããšããŠããŸã
FlightRowController
ã - ãããæåããå Žåãã¢ãã¡ãŒã·ã§ã³APIã䜿çšã
WKInterfaceController
ãŠã0.35ç§ã§ã¯ããŒãžã£ãå®è¡ããŸãã - éãããšãã«ãã«è¿œå ããã¡ãœãããåŒã³åºããŸã
FlightRowController
ãããã«ãããç»åã®è²ãšããŒãã«ã®ãã®è¡ã®ã»ãã¬ãŒã¿ã倿Žãããç»é²ãå®äºããããšãç¥ãããèŠèŠçãªãã£ãŒãããã¯ããŠãŒã¶ãŒã«æäŸãããŸãã
ã¢ããªã±ãŒã·ã§ã³ããã«ãããŠå®è¡ããŸããåãšåãæé ã«åŸã£ãŠãã©ã€ãã«ç»é²ãããšãã¹ã±ãžã¥ãŒã«ã€ã³ã¿ãŒãã§ã€ã¹ã®ã³ã³ãããŒã©ãŒã«æ»ããããŒãã«ã®å¯Ÿå¿ããè¡ã®ç»åãšã»ãã¬ãŒã¿ãŒã®è²ãæ¬¡ç¬¬ã«æ°ããè²ã«å€ãããŸããããã§ãšãããããŸãïŒ
WatchKitã¢ãã¡ãŒã·ã§ã³ã®æåã®ã»ããã®å®è£
ãå®äºããŸãããããã§ãããžã§ã¯ãã®æºåäŸãã®ãã¥ãŒããªã¢ã«ã§è¡ã£ãŠããŸãããã®ããŒãã§ã¯ã2çš®é¡ã®WatchKitã¢ãã¡ãŒã·ã§ã³ãäœæããæ¹æ³ãåŠã³ãŸãããæåã¯ã¢ãã¡ãŒã·ã§ã³åãããäžé£ã®ç»åãWKInterfaceController
䜿çšãã2çªç®ã¯ã¢ãã¡ãŒã·ã§ã³APIã䜿çšããŸããã