ãããã®ã¿ã€ãã®æ¡åŒµæ©èœã®1ã€ã¯ã ãŠã£ãžã§ãããšãåŒã°ããToday Extensionsã§ãã éç¥ã»ã³ã¿ãŒã«æ å ±ã衚瀺ããæ©äŒãæäŸããŸããããã¯ããŠãŒã¶ãŒãèå³ãæã£ãŠããæãé¢é£æ§ã®ããæ å ±ãæäŸããçŽ æŽãããæ¹æ³ã§ãã
ãã®èšäºã§ã¯ã Today Extensionã«åºã¥ããŠãç±³ãã«ã«åºã¥ãããããã³ã€ã³ã®çŸåšã®åžå ŽäŸ¡å€ã瀺ãã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
ãŠãŒã¶ãŒã«é©åãªæ å ±ãæäŸããããšã¯ãããã»ã©ç°¡åã§è¿ éã§ã¯ãããŸããã§ããã ããå§ããŸãããïŒ
ãããã³ã€ã³/ãããã³ã€ã³
ãããã³ã€ã³ã«æ £ããŠããªã人ã«ãšã£ãŠã¯ãããã¯ãŸã åæ段éã«ããããžã¿ã«æå·é貚ã§ãã ãã¢ããŒãã¢ã®äº€æãšè³Œå ¥ã«äœ¿çšããããšã«å ããŠããããã³ã€ã³ã¯ããŠãŒã¶ãŒãããããDogecoinãLitecoinãªã©ã®ä»ã®æå·é貚ãŸãã¯ç±³ãã«ãŸãã¯ãŠãŒããšäº€æã§ããããã«ããŸãã
ããã¯æ¯èŒçæ°ããé貚ã§ããããããã®åžå ŽäŸ¡å€ã¯1åããšã«å€åããŸãã ãã®ååšã®å šæéã«ããã£ãŠå€§ããªããŒã¯ãšäžæ³ããããŸããã ãããã£ãŠãæè³å®¶ãŸãã¯ãã€ã€ãŒã¯æ ªäŸ¡ãæãè¿ãç§ãŸã§ç¥ãããã®ã§ãããã¯Today Extensionã®çæ³çãªåè£ã§ãïŒ
ã¯ãªããã£ãã«ãŒ
æ¡åŒµæ©èœãäœæããŠãããããéå§ããã«ã¯æ¢è£œã®ã¢ããªã±ãŒã·ã§ã³ãå¿ èŠã§ãã ããŠãCryptickerã«ã€ããŠç¥ãæéã§ãã
Cryptickerã¯ãçŸåšã®ãããã³ã€ã³ã®äŸ¡æ Œãæšæ¥ãšçŸåšã®äŸ¡æ Œã®å·®ãããã³äŸ¡æ Œå±¥æŽã®ã°ã©ãã衚瀺ããã·ã³ãã«ãªã¢ããªã±ãŒã·ã§ã³ã§ãã ã¹ã±ãžã¥ãŒã«ã«ã¯30æ¥éã®å±¥æŽãå«ãŸããŸãã ãã£ãŒãäžã§æãã¹ã¯ã€ããããšãç¹å®ã®æ¥ã®æ£ç¢ºãªäŸ¡æ Œã衚瀺ãããŸãã
æ¡åŒµæ©èœã«ã¯ãããã®ãã¹ãŠã®æ©èœãå«ãŸããŸãããã¹ã±ãžã¥ãŒã«ã§æãã¹ã¯ã€ããããšç¹å®ã®æ¥ã®äŸ¡æ Œã確èªã§ããªããªããŸãã ç¹ã«ãžã§ã¹ãã£ãšãã«ãã¿ã¹ã¯ã®äœ¿çšã«é¢ããŠã¯ãToday Extensionsãžã®ãªã³ã¯ãããã€ããããŸãã ãžã§ã¹ãã£ã¯ãToday Extensionsãšéç¥ã»ã³ã¿ãŒã®éã§æãã¹ã¯ã€ãããããšã§ã¢ã¯ãã£ãã«ãªãããšãå€ããããå®äºããããã«å€ãã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå¿ èŠãšããå¿ èŠã¯ãããŸããã
ä»äºã«è¡ãã
Cryptickerã¹ã¿ãŒã¿ãŒãããžã§ã¯ããããŠã³ããŒãããŠéå§ããå¿ èŠããããŸãã äžèšã®ããã«ããããžã§ã¯ãã«ã¯Cryptickerã¢ããªã±ãŒã·ã§ã³ãå«ãŸããŠããŸãã ãã®èšäºã§ã¯ãã¢ããªã±ãŒã·ã§ã³èªäœã®éçºã«çŠç¹ãåœãŠãªãããããã®èšäºã®çãã«é©ãããããšã§ãããã æåŸã«ãã¢ããªã±ãŒã·ã§ã³å šäœã§ã¯ãªããæ¡åŒµæ©èœãäœæããŸãã
ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠå®è¡ããŸãã WebãµãŒãã¹ã䜿çšããŠãªã¢ã«ã¿ã€ã ã§äŸ¡æ Œã確èªããã«ã¯ãã€ã³ã¿ãŒãããæ¥ç¶ãå¿ èŠã§ãã
ã¢ããªã±ãŒã·ã§ã³ã¯ã¹ã¯ãªãŒã³ã·ã§ããã®ããã«èŠããŸãã ãã¡ããã衚瀺ãããããŒã¿ã¯ããããã³ã€ã³åžå Žã®ç¶æ³ã«ãã£ãŠç°ãªããŸãã äžéšã®ã°ã©ãã«è§Šãããšãç·ã衚瀺ããã察å¿ããæ¥ã®äŸ¡æ Œã衚瀺ãããŸãã
ãŸã BTCãç¥ããªã人ã«ãšã£ãŠã¯ãããã¯ãããã³ã€ã³ã®ç瞮圢ã§ãã ç±³ãã«ãç±³ãã«ãè¡šãããã«ã æ¬æ¥æ¡åŒµã§ã¯ãCryptickerã®åºæ¬æŠå¿µã®å°èŠæš¡ããŒãžã§ã³ã玹ä»ããŸãã
çè«çã«ã¯ãCryptickerã¢ããªã±ãŒã·ã§ã³ã«ã¯è€æ°ã®æå·é貚ã®äŸ¡æ Œã衚瀺ããæ©èœããããŸãããæ¡åŒµæ©èœã¯BTCã®ã¿ã察象ãšããŠããŸãã ãããã£ãŠã BTC WidgetãšåŒã°ããŸãã
æ³šïŒ æ¡åŒµæ©èœã«ã¯ããã®æ§è³ªäžãåçŽãªæ©èœç®çã1ã€ãããããŸããã Dogecoinãªã©ã®å¥ã®æå·é貚ã®æ å ±ã衚瀺ããå Žåã¯ãå¥ã®ãŠã£ãžã§ãããäœæããããã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãäœæããããããšãã°æ ªäŸ¡ãŠã£ãžã§ããã®ããã«UIãéçºããã®ãæåã§ãã
èšäºã®çµãããŸã§ã«ã Todayæ¡åŒµæ©èœã¯æ¬¡ã®ããã«ãªããŸãã
Target Todayæ¡åŒµæ©èœã®è¿œå
æ¡åŒµæ©èœã¯ããã¹ãã¢ããªã±ãŒã·ã§ã³ããåä¿¡ããå¥åã®ãã€ããªãã¡ã€ã«ãšããŠäœæãããŸãã ãããã£ãŠãã¿ãŒã²ããã®Today ExtensionãCryptickerãããžã§ã¯ãã«è¿œå ããå¿ èŠããããŸãã
Project Navigatoã®Xcodeã§ãCryptickerãããžã§ã¯ããéžæããæ°ããã¿ãŒã²ããEditor \ Add Target ...ãè¿œå ããŸãã次ã«ã iOS \ Application Extension \ Today ExtensionãéžæããŸãã [ 次㞠]ãã¿ã³ãã¯ãªãã¯ããŸãã
補ååã«BTC Widgetãšå ¥åããããã°ã©ãã³ã°èšèªãSwiftã§ããããš ãããã³ã¢ããªã±ãŒã·ã§ã³ã®åã蟌ã¿ãããžã§ã¯ããCryptickerã§ããããšã確èªããŸãã å®äºãã¯ãªãã¯ããŸãã
ããã³ããã衚瀺ããããã BTCãŠã£ãžã§ããã¹ããŒã ãã¢ã¯ãã£ãã«ããå¿ èŠããããŸãã ããã¹ãã¯ã Xcodeã§å®è¡ããããã®å¥ã®ã¹ããŒã ãäœæãããããšã瀺ããŠããããã§ãã
ããã§ãšãããããŸãïŒ ããã§ã BTCãŠã£ãžã§ãããã¿ãŒã²ãããªã¹ãã«è¡šç€ºãããŸãã
[ BTCãŠã£ãžã§ãã]ãéžæããŠãã[å šè¬]ã¿ããéžæãã[ ãªã³ã¯ããããã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãª]è¡ã®äžã«ãã[ + ]ãã¿ã³ãã¯ãªãã¯ããŸãã åçã瀺ãããã«ïŒ
CryptoCurrencyKit.frameworkãéžæãã[ è¿œå ] ãã¯ãªãã¯ããŸãã
CryptoCurrencyKitã¯ã Cryptickeã¢ããªã±ãŒã·ã§ã³ããããã¯ãŒã¯ããäŸ¡æ Œãšé貚ãåãåãããã«äœ¿çšããã«ã¹ã¿ã ãã¬ãŒã ã¯ãŒã¯ã§ãã 幞ããªããšã«ãä¿¡ããããªãã»ã©èŠªåã§ææ ®æ·±ãCryptickeréçºè ã¯ãã¢ãžã¥ãŒã«èšèšãã³ãŒãã«é©çšããè€æ°ã®ã¿ãŒã²ããã䜿çšã§ããããã«ãã¬ãŒã ã¯ãŒã¯ã«å€æããŸããã
ãã¹ãã¢ããªã±ãŒã·ã§ã³ãšãã®æ¡åŒµæ©èœã®éã§ããŒã¿ã亀æããã«ã¯ãã«ã¹ã¿ã ãã¬ãŒã ã¯ãŒã¯ã䜿çšããå¿ èŠããããŸãã ããããªããšãã³ãŒããäœåºŠãè€è£œããå¿ èŠãããããœãããŠã§ã¢ãšã³ãžãã¢ãªã³ã°ã®éèŠãªã«ãŒã«ã§ããDRY-ãŸãã¯ã ç¹°ãè¿ããªãã§ãã ããã ããäžåºŠç¹°ãè¿ããŸãã ãç¹°ãè¿ããªãã§ãã ãã ã ã
ãããããæ¡åŒµæ©èœã®å®è£ ãéå§ã§ããŸãã
Project navigatorã« ãæ°ããã¿ãŒã²ããBTC Widgetã«ã¡ãªãã§ååãä»ããããã°ã«ãŒããããããšã«æ³šæããŠãã ããã ããã¯ãTodayæ¡åŒµã³ãŒããããã©ã«ãã§é 眮ãããå Žæã§ãã
ã°ã«ãŒããå±éãããšãView Controllerãã¹ããŒãªãŒããŒããInfo.plistãã¡ã€ã«ã衚瀺ãããŸãã 圌ã®ã¿ãŒã²ããæ§æã¯ã MainInterface.storyboardããã€ã³ã¿ãŒãã§ã€ã¹ãããŒãããããã«æ瀺ããŸããMainInterface.storyboardã«ã¯ ã TodayViewController.swiftã«å²ãåœãŠãããã¯ã©ã¹ãæã€1ã€ã®View Controllerãå«ãŸããŠããŸãã
Today Extensionãã³ãã¬ãŒãã«ããã¯ãã®ããã€ãã®ãã¡ã€ã«ãæ¬ èœããŠããããšã«æ°ä»ãã§ãããã ããšãã°ãããªã²ãŒãã¢ããªã±ãŒã·ã§ã³ãšããŠã æ¡åŒµæ©èœã¯ãã¢ããªã±ãŒã·ã§ã³ã®åŸæ¥ã®ã©ã€ããµã€ã¯ã«ãçµãªãããã«ãå¥ã®ãã¹ãã¢ããªã±ãŒã·ã§ã³å ã§æ©èœããããšã«æ³šæããŠãã ããã
å®éãæ¡åŒµã©ã€ããµã€ã¯ã«ã¯TodayViewControllerã©ã€ããµã€ã¯ã«ã«è¡šç€ºãããŸãã
MainInterface.storyboardãéããšã ãHello Worldããšããæããæåã®æãæããèæ¯ã衚瀺ãããŸãã ä»æ¥ãæ¡åŒµæ©èœã«ã¯ãæããèæ¯ãšãéç¥ã»ã³ã¿ãŒã®æããŒãããèæ¯ã«å®å šã«æº¶ã蟌ãæãããŸãã¯æããè²ã®ããã¹ããåããæé«è§£å床ã®ç»åããããŸãã
XcodeããŒã«ããŒã§ã¿ãŒã²ããBTCãŠã£ãžã§ãããéžæãããã³ã³ãã€ã«ãããŠå®è¡ãããŠããããšã確èªããŠãã ããã ãã®çµæãã¢ããªã±ãŒã·ã§ã³ãèµ·åããèš±å¯ãæ±ãããŠã£ã³ããŠã衚瀺ãããŸãã Xcodeã¯ãå®è¡ãããã¹ãã¢ããªã±ãŒã·ã§ã³ãå°ããŸãã ä»æ¥ãéžæããŸã ã ããã¯ãiOSãTodayããã«ã§éç¥ã»ã³ã¿ãŒãéãããŠã£ãžã§ãããèµ·åãããããšã瀺ããŠããŸãã éç¥ã»ã³ã¿ãŒã¯ãå®éã«ã¯Today Extensionsã®ãã¹ãã¢ããªã±ãŒã·ã§ã³ã§ãã
ãŸãããŠã£ãžã§ããã®å®è¡äžã«Xcodeããããã¬ãŒã䜿çšã§ããããã«ããŸãã
ããããŠã£ãžã§ããã§ãã ããã§ãã ããã¯éåžžã«ãšããµã€ãã£ã³ã°ãªããšã§ããããŠã£ãžã§ããã§ããå°ãäœæ¥ãè¡ãå¿ èŠããããŸãã é¢çœãããšãããæãæ¥ãŸããïŒ
æ³šïŒ ãŠã£ãžã§ããã®èµ·åæã«ã³ã³ãœãŒã«ã«è¡šç€ºãããèªåã¬ã€ã¢ãŠãã®äœ¿çšã«é¢é£ããå€ãã®ãšã©ãŒã«æ°ä»ãå ŽåããããŸãã ããã¯Xcodeã®ãã³ãã¬ãŒãã®åé¡ã§ãããAppleãå°æ¥çã«è§£æ±ºããããšãé¡ã£ãŠããŸãã ãã ããç¬èªã®ã€ã³ã¿ãŒãã§ã€ã¹ãšèªåã¬ã€ã¢ãŠãã䜿çšããæ©èœãæ¢ã«æã£ãŠãããããå¿é ããå¿ èŠã¯ãããŸããã
ã€ã³ã¿ãŒãã§ãŒã¹ãäœæãã
MainInterface.storyboardãéãã Labelãåé€ããŸãã é«ã150ãã€ã³ããå¹ 320ãã€ã³ãã®ãµã€ãºã®ãã¥ãŒãè¿œå ãã ãµã€ãºã€ã³ã¹ãã¯ã¿ãŒã§èšå®ããŸãã ãã¿ã³ã2ã€ã®ã©ãã«ãããã³ãã¥ãŒããªããžã§ã¯ãã©ã€ãã©ãªããView Controllerã«ç§»åããŸãã
- ã©ãã«ã®1ã€ãå·Šäžé ã«é 眮ããå±æ§ã€ã³ã¹ãã¯ã¿ãŒã§ããã¹ãã$ 592.12ã«èšå®ããè²ãèµ€ïŒ66ãç·ïŒ145ãéïŒ211ã«èšå®ããŸããçŸåšã®åžå ŽäŸ¡æ Œã衚瀺ãããŸãã
- ã€ã³ã¹ããŒã«ããã°ããã®ã©ãã«ã®å³åŽã«å¥ã®ã©ãã«ãé 眮ããŸããããã¿ã³ã®å³åŽã«ããã¯ã¹ãæ®ããŸãã å±æ§ã€ã³ã¹ãã¯ã¿ãŒã§ãããã¹ãã+1.23ã«ãè²ãèµ€ïŒ133ãç·ïŒ191ãéïŒ37ã«èšå®ããŸããããã«ãããæšæ¥ã®äŸ¡æ ŒãšçŸåšã®äŸ¡æ Œã®å·®ã衚瀺ãããŸãã
- ãã¿ã³ãå³äžã®ãã¥ãŒã«ç§»åããå±æ§ã€ã³ã¹ãã¯ã¿ãŒã§ç»åããã£ã¬ããéç¥ã»ã³ã¿ãŒã«èšå®ããã¿ã€ãã«ãåé€ããŸãã
- æåŸã«ã2ã€ã®ã©ãã«ãšãã¿ã³ã®äžã«ç©ºã®ãã¥ãŒãé 眮ããäžç«¯ãšåŽç«¯ããã¥ãŒã®ã³ã³ãã³ãã«è§Šããããã«äŒžã°ããŠãé«ãã98ã«èšå®ããŸãã
æ³šïŒ å ¥åæã«XcodeãæäŸã§ããJBLineChartDotViewãšããã¯ã©ã¹ããããŸããå¿ ãJBLineChartViewãéžæããŠãã ãã ã
ãã¥ãŒãšããã¥ã¡ã³ãã¢ãŠãã©ã€ã³ã¯æ¬¡ã®ããã«ãªããŸãã
æ³šïŒ ãã®èšäºã§ã¯ãå¯èŠæ§ã®ããã«ãã¥ãŒãçœã§ç€ºããŠããŸãã ãã¥ãŒã«ã¯ãå®éã«ã¯éç¥ã»ã³ã¿ãŒã§ã®ãã¥ãŒã®è¡šç€ºæ¹æ³ãã¢ãã«åããæãç°è²ã®èæ¯ããããŸãã
ããã«èªåã¬ã€ã¢ãŠããè¿œå ããŠå Žæãé©åã«æ±ºå®ããããã é 眮ãããé åºã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããã
Project Navigator㧠Cryptickerã°ã«ãŒããå±éãã Images.xcassetsãéžæããŸãã [ãã¡ã€ã«ã€ã³ã¹ãã¯ã¿ãŒ]ã§ã BTCãŠã£ãžã§ããã®å·ŠåŽã«ãããã§ãã¯ããã¯ã¹ããªã³ã«ããŠã察象ã®ãã£ã¬ã¯ããªãã¿ãŒã²ããæ¡åŒµæ©èœã«è¿œå ããŸãã
ããã«ããã Xcodeã¯ã¿ãŒã²ãããŠã£ãžã§ããã«ã¿ãŒã²ããCryptickerã®ã°ã©ãã£ãã¯ãªãœãŒã¹ãã£ã¬ã¯ããªã匷å¶çã«å«ããŸãã ããã¯ããã¿ã³ã«äœ¿çšãããã£ã¬ããéç¥ã»ã³ã¿ãŒã®ç»åãããå Žæã§ãã ã³ã³ããã¢ããªã±ãŒã·ã§ã³ãšãŠã£ãžã§ããã®éã«åãã°ã©ãã£ãã¯ãªãœãŒã¹ãããå Žåãå ±æå¯èœãªãªãœãŒã¹ã®ã¿ãå«ãç¹å¥ãªãã£ã¬ã¯ããªã䜿çšããããšããå§ãããŸãã ããã«ãããæçµçãªæ¡åŒµããã¯ã®ãµã€ãºã倧ãããªãã䜿çšãããŠããªãç»åã¯å«ãŸããªããªããŸãã
MainInterface.storyboardã«æ»ãã ã¢ã·ã¹ã¿ã³ããšãã£ã¿ãŒãéããŸãã ãããŠã TodayViewController.swiftãã¢ã¯ãã£ããã¡ã€ã«ã§ããããšã確èªããŸãã ãã¡ã€ã«ã®å é ã«æ¬¡ã®ã³ãŒããè¿œå ããŸãã
import CryptoCurrencyKit
CryptoCurrencyKitãã¬ãŒã ã¯ãŒã¯ã®ã€ã³ããŒããè¡ããŸãã ã
次ã«ãã¯ã©ã¹å®£èšãæŽæ°ããå¿ èŠããããŸããããã¯æ¬¡ã®ããã«ãªããŸãã
class TodayViewController: CurrencyDataViewController, NCWidgetProviding {
ããã«ããã TodayViewControllerã¯CurrencyDataViewControllerã®ãµãã¯ã©ã¹ã«ãªãã NCWidgetProvidingãããã³ã«ã«æºæ ããããã«ãªããŸãã
CurrencyDataViewControllerã¯CryptoCurrencyKitã«å«ãŸããŠããã Cryptickerã®ã¡ã€ã³ãã¥ãŒãšããŠã䜿çšãããŸãã ãŠã£ãžã§ãããšã¢ããªã±ãŒã·ã§ã³ã¯UIViewControllerãä»ããŠåæ§ã®æ å ±ã衚瀺ãããããèŠä»¶ãç°ãªããããåå©çšå¯èœãªã³ã³ããŒãã³ããã¹ãŒããŒã¯ã©ã¹ã«å ¥ããŠãããµãã¯ã©ã¹åããã®ãçã«ããªã£ãŠããŸãã
NCWidgetProvidingã¯ããŠã£ãžã§ããçšã«ç¹å¥ã«èšèšããããããã³ã«ã§ãã ãããååŸããã«ã¯ãå®è£ ãã2ã€ã®æ¹æ³ããããŸãã
CtrlããŒãæŒããªããããã¿ã³ããã¯ã©ã¹å®£èšã®ããäžã®ã¯ã©ã¹ã«ç§»åããŸãã 衚瀺ããããã€ã¢ãã°ã§ãã æ¥ç¶ããã ã¢ãŠãã¬ããã ããã¿ã€ãããã UIButton ããšããŠéžæãããŠããããšã確èªãã ãååããã£ãŒã«ãã«toggleLineChartButtonãšå ¥åããŸã ã æ¥ç¶ãã¯ãªãã¯ããŸã ã
次ã«ãctrlãæŒããªããããã¿ã³ããã¯ã©ã¹ã®äžçªäžã«ç§»åããŸãã 衚瀺ããããã€ã¢ãã°ã§ã ConnectionãActionã«å€æŽãã TypeãUIButtonã«èšå®ããŠã Nameè¡ã«toggleLineChartãšå ¥åããŸã ã æ¥ç¶ãã¯ãªãã¯ããŸã
TodayViewControllerã¯CurrencyDataViewControllerããµãã¯ã©ã¹åããŸããããã«ã¯ãäŸ¡æ Œã©ãã«ãé«å€ã®å€æŽãæãç·ã°ã©ã衚瀺ã®åºåããããŸãã 次ã«ãããããæ¥ç¶ããå¿ èŠããããŸãã [ ããã¥ã¡ã³ãã¢ãŠãã©ã€ã³]㧠ãctrlãæŒããªããToday View ControllerããäŸ¡æ Œã©ãã« ïŒããã¹ãã$ 592.12ã«èšå®ïŒã«ç§»åããŸãã ãããã¢ããããpriceLabelãéžæããŠãæ¥ç¶ãäœæããŸãã ãããã¢ããããpriceChangeLabeãéžæããŠãå¥ã®ã©ãã«ã«ã€ããŠããããã¹ãŠç¹°ãè¿ããŸãã æåŸã«ããããã¢ããããlineChartViewãéžæããŠã æãç· ã°ã©ããã¥ãŒã«å¯ŸããŠåãããšãè¡ããŸã...
èªåã¬ã€ã¢ãŠã
ãŠã£ãžã§ãããé©å¿ãããã«ã¯ã èªåã¬ã€ã¢ãŠããªã³ã¯ãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã iOS 8ã§ãªãªãŒã¹ãããæ°ããæ¥ç¶ã¯ã Adaptive Layou tã®æŠå¿µã§ãã äžè¬çãªèãæ¹ã¯ãåäžã®ã¬ã€ã¢ãŠãã§èšèšããããã¥ãŒãããŸããŸãªç»é¢ãµã€ãºã§æ©èœã§ãããšããããšã§ãã ãã¥ãŒã¯ãããã€ã¹ã®æªç¥ã®å°æ¥ã®ã¡ããªãã¯å€ã«é©å¿ã§ããå Žåãé©å¿æ§ããããšèŠãªãããŸãã
è¿œå ãããªã³ã¯ã®1ã€ã¯ãã°ã©ãã®è¡šç€ºãšé衚瀺ãåãæ¿ãããŠã£ãžã§ããã®å šäœã®é«ãã決å®ããã®ã«åœ¹ç«ã¡ãŸãã éç¥ã»ã³ã¿ãŒã¯ãé©åãªé«ãã§ãŠã£ãžã§ããã衚瀺ããããã«ãå ¥åãããããŒã¿ã«åºã¥ããŸãã
Lable $ 592.12ãéžæãã次ã«Editor \ Size to Fit ContentãéžæããŸãã ã¡ãã¥ãŒã§[ ã³ã³ãã³ãã«åãããŠãµã€ãºèª¿æŽ]ãªãã·ã§ã³ãç¡å¹ã«ãªã£ãŠããå Žåã¯ã[ã©ãã«]ã®éžæã解é€ããããäžåºŠéžæããŠããããäžåºŠè©ŠããŠãã ããã æã ãXcodeãå°ãéæ¬ çã«åäœããå ŽåããããŸãã 次ã«ã ã¹ããŒãªãŒããŒãã¯ãŒã¯ã¹ããŒã¹ã®äžéšã«ãã[ãã³]ãã¿ã³ã䜿çšããŠã[ããã]ãš[ãªãŒã]ã®åªå 床ããããã8ãš16ã«èšå®ããŸãã [ ããŒãžã³ã«åããã]ãéžæãããŠããããšã確èªããŸãã
Lable +1.23ãéžæãã Editor \ Size to Fit Contentãå床éžæããŸãã 次ã«ã[ Pin ]ãã¿ã³ã䜿çšããŠã Topããã³Trailingé¢ä¿ãéžæããããããã£ã8ã«èšå®ããŸãã
ButtonãéžæããPinãã¿ã³ã䜿çšããŠãTopãšTrailingã®åªå 床ã0ã«ãBottomã8ã«èšå®ããŸããå¹ ãšé«ãã44ã«èšå®ããŸããConstrainto marginsããªãã«ããŸãã
ãã¿ã³ã®äžäœãã€ã³ãã£ã³ã°ã®åªå 床ãäžããå¿ èŠããããŸãã ãã¿ã³ãéžæãããµã€ãºã€ã³ã¹ãã¯ã¿ãŒãéããŸãã äžéšã¹ããŒã¹ã®æ€çŽ¢å ïŒãªã³ã¯ã®ãªã¹ãå ã®ãªã³ã¯ã[ ç·šé ]ãã¿ã³ãã¯ãªãã¯ãã åªå 床ã250ã«å€æŽããŸãã
åªå 床ãäžããããšã«ãããå¿ èŠã«å¿ããŠèªåã¬ã€ã¢ãŠãã·ã¹ãã ããã®ãã€ã³ãã£ã³ã°ãå€æŽã§ããããã«ããŸãã 250ã¯ä»»æã®å€ã§ããã1000æªæºã§ããããšãå€æããŸãããããã©ã«ãã§ãã¹ãŠã®ãã€ã³ãã£ã³ã°ã«èšå®ãããã®ã¯ãã®åªå 床ã§ãã ãã®ãã€ã³ãã£ã³ã°ã¯ããŠã£ãžã§ãããæå°åããããšããã«å€æŽãããã¯ãã§ãã ãã€ã³ãã£ã³ã°ã«ããŸããŸãªåªå 床ã¬ãã«ãèšå®ãããšã競åãçºçãããšãã«æåãŸãã¯æåŸã«å€æŽããå¿ èŠãããæ¥ç¶ãã·ã¹ãã ã«äŒããããšãã§ããŸãã
æåŸã«ãæãç·ã°ã©ããã¥ãŒãéžæããŸã ã ãã³ãã¿ã³ã䜿çšããŠã LeadingãTrailingãBottomãéžæããããããã£ã§å€ã0ã«èšå®ããé«ãã98ã«èšå®ããŸãã
[ ããã¥ã¡ã³ãã¢ãŠãã©ã€ã³]ãã [ ãã¥ãŒã³ã³ãããŒã©ãŒ]ãã¥ãŒãéžæãã [ ãšãã£ã¿ãŒ] \ [èªåã¬ã€ã¢ãŠãã®åé¡ã®è§£æ±º] \ [ãã¹ãŠã®ãã¥ãŒ] \ [ãã¬ãŒã ã®æŽæ° ]ãéžæããŸã ã ããã«ãããæ£ãããã€ã³ãã£ã³ã°ã«äžèŽããããã«ãã¬ãŒã ãæŽæ°ããããšã«ãããã¯ãŒã¯ã¹ããŒã¹ã®èªåã¬ã€ã¢ãŠãèŠåããªããªããŸãã [ ãã¬ãŒã ã®æŽæ°]ãéžæãããŠããå Žåãå¿ èŠã«å¿ããŠãã¹ãŠãå®è¡ããŠãããããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããå¿ èŠã¯ãããŸããã
ãã¹ãŠã®ãã€ã³ãã£ã³ã°ãé 眮ãããŠãããããæåŸã®ã¹ãããã¯ãæãç·ã°ã©ããã¥ãŒã®é«ããã¹ãããããåºåãäœæããããšã§ãã ããã¥ã¡ã³ãã¢ãŠãã©ã€ã³ã§æãç· ã°ã©ããã¥ãŒãèŠã€ããäžè§åœ¢ãã¯ãªãã¯ããŠå±éããŸãã
次ã«ã[ å¶çŽ ]ã®äžè§åœ¢ãã¯ãªãã¯ããŠãé«ãã®ç®çã®ã¹ããããèŠã€ããŸãã ãããéžæããCtrlããŒãæŒããªããã¢ã·ã¹ã¿ã³ããšãã£ã¿ãŒã«ãã©ãã°ããŠãå¥ã®ã¢ãŠãã¬ããã®ããäžã«é 眮ããŸãã ãããã¢ãããŠã£ã³ããŠã§ã[ æ¥ç¶]ã[ ã¢ãŠãã¬ãã]ã«éžæãããŠããããšã確èªãã[ åå]ã«lineChartHeightConstraintãšå ¥åããŸã ã æ¥ç¶ãã¯ãªãã¯ããŸã ã
TodayViewController.swiftã®å®è£
ããã§ã€ã³ã¿ãŒãã§ã€ã¹ãé©åãªå Žæã«é 眮ãããå¿ èŠãªãã®ãã»ããã¢ãããããŸãããæšæºãšãã£ã¿ã§TodayViewController.swiftãã¡ã€ã«ãéžæããŠéããŸãã
UIViewControllerã®æšæºãµãã¯ã©ã¹ã䜿çšããŠããããšã«æ°ä»ãã§ãããã å¿«é©ã§ããïŒ åŸã§ã NCWidgetProvidingãããã³ã«ããæ°ããwidgetPerformUpdateWithCompletionHandlerã¡ãœããã«ééããŸãã ãã®èšäºã®çµãããŸã§ã«ã圌ã«ã€ããŠè©³ããç¥ãããšãã§ããŸãã
ãã®View Controllerã¯ãçŸåšã®äŸ¡æ ŒãäŸ¡æ Œå·®ã衚瀺ãããã¿ã³ãæŒããŠäŸ¡æ Œãã£ãŒããæãç·ã°ã©ãã§è¡šç€ºããŸãã
æãç·ã°ã©ãã衚瀺ããããã©ããã远跡ããããã«äœ¿çšããTodayViewControllerã®äžéšã§ããããã£ãå®çŸ©ããŸãã
var lineChartIsVisible = false
次ã«ãviewDidLoadïŒïŒã¡ãœããã次ã®å®è£ ã«çœ®ãæããŸãã
override func viewDidLoad() { super.viewDidLoad() lineChartHeightConstraint.constant = 0 lineChartView.delegate = self; lineChartView.dataSource = self; priceLabel.text = "--" priceChangeLabel.text = "--" }
ãã®ã¡ãœããã¯ã次ã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
- æ£ã°ã©ãã®ãé«ãã®å¶çŽãã®é«ãã0ã«èšå®ããŠãããã©ã«ãã«ããŸãã
- selfãããŒã¿ãœãŒã¹ãšããŠèšå®ããæãç·ã°ã©ããè¡šãããªã²ãŒããèšå®ããŸãã
- 2ã€ã®ã©ãã«ã«ãã¬ãŒã¹ãã«ããŒããã¹ããèšå®ããŸãã
TodayViewControllerã«ãšã©ãŸã ã次ã®ã¡ãœãããè¿œå ããŸãã
override func viewDidAppear(animated: Bool) { super.viewDidAppear(animated) fetchPrices { error in if error == nil { self.updatePriceLabel() self.updatePriceChangeLabel() self.updatePriceHistoryLineChart() } } }
fetchPricesã¡ãœãã㯠CurrencyDataViewControllerã§å®çŸ©ãããŠããããããã¯ã®çµäºãåãå ¥ããéåæåŒã³åºãã§ãã ã¡ãœããã¯ãèšäºã®åé ã«èšèŒãããŠããWebãµãŒãã¹ãžã®ãªã¯ãšã¹ããå®è¡ããŠã ãããã³ã€ã³ã®äŸ¡æ Œã«é¢ããæ å ±ãååŸããŸãã
ãã®ã¡ãœããã¯ã ã©ãã«ãšæãç·ã°ã©ãã®äž¡æ¹ãæŽæ°ããŸãã æŽæ°ã¡ãœãããã¹ãŒããŒã¯ã©ã¹ã§å®çŸ©ãããŸãã fetchPricesã¡ãœããã«ãã£ãŠååŸãããå€ãåçŽã«åãå ¥ããç»é¢ã«è¡šç€ºããããã«ããããé©å®ãã©ãŒãããããŸãã
ãŠã£ãžã§ããã®èšèšã«ããã widgetMarginInsetsForProposedMarginInsetsãå®è£ ããŠãã«ã¹ã¿ã ãã£ãŒã«ãã«ã¿ããæäŸããå¿ èŠããããŸãã TodayViewControllerã«æ¬¡ã®ã³ãŒããè¿œå ããŸãã
func widgetMarginInsetsForProposedMarginInsets (defaultMarginInsets: UIEdgeInsets) -> (UIEdgeInsets) { return UIEdgeInsetsZero }
ããã©ã«ãã§ã¯ããŠã£ãžã§ããã«ã¯å€§ããªãã£ãŒã«ãããããå€ãã®AppleãŠã£ãžã§ããã«ããã©ã«ãã§ã€ã³ã¹ããŒã«ãããŸãã éç¥ã»ã³ã¿ãŒã®å¹ å šäœãåãããå Žåã¯ããã®ã¡ãœãããå®è£ ãããã¹ãŠã®é¢ä¿è ã«å¯ŸããŠå€0ãå®çŸ©ããUIEdgeInsetsZeroãè¿ãå¿ èŠããããŸãã
次ã«ãäœãèµ·ãã£ãã®ãã確èªããŸãã BTCãŠã£ãžã§ããã¹ããŒã ãéžæããŸãã æ¡åŒµæ©èœãã³ã³ãã€ã«ããŠå®è¡ããŸãã ããã³ããã衚瀺ãããããèµ·åããã¢ããªã±ãŒã·ã§ã³ãšããŠTodayãéžæããŸãã
- éç¥ã»ã³ã¿ãŒã衚瀺ãããªãå Žåã¯ãç»é¢ã®äžéšããäžã«ã¹ã¯ã€ãããŠã¢ã¯ãã£ãã«ããŸãã
- ãŠã£ãžã§ãããéç¥ã»ã³ã¿ãŒã«è¡šç€ºãããªãå Žåã¯ã[ç·šé]ã¡ãã¥ãŒããè¿œå ããå¿ èŠããããŸãã Todayã³ã³ãã³ããã¥ãŒã®äžéšã«ã[ ç·šé ]ãã¿ã³ããããŸãã ãã¿ã³ãã¯ãªãã¯ããŠãã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããŠãããã¹ãŠã®Todayæ¡åŒµæ©èœã®ã¡ãã¥ãŒãå±éããŸãã ããã§ãå¿ èŠã«å¿ããŠæå¹åãç¡å¹åã䞊ã¹æ¿ããè¡ãããšãã§ããŸãã BTCãŠã£ãžã§ããããŸã ãªã³ã«ããŠããªãå Žåã¯ãªã³ã«ããŸãã
ãã£ãããã§ããã ãŠã£ãžã§ããã¯ããªã¢ã«ã¿ã€ã ã®ãããã³ã€ã³äŸ¡æ Œãéç¥ã»ã³ã¿ãŒã«çŽæ¥è¡šç€ºããããã«ãªããŸããã ãããããããã1ã€ã®åé¡ã«æ°ã¥ããã§ãããã ãã¿ã³ã¯æ©èœããããã£ãŒãã¯è¡šç€ºãããŸããã
次ã«ãè¿œå ãããã¿ã³ã«toggleLineChartã¡ãœãããå®è£ ããŠããŠã£ãžã§ãããã¥ãŒãå±éã ãã°ã©ãã衚瀺ããå¿ èŠããããŸãã ã¡ãœããã®ååã瀺ãããã«ããã®ãã¿ã³ã¯ã¹ã€ãããšããŠæ©èœããŸãã ãŸãããã¥ãŒãæããããã§ãã£ãŒããé衚瀺ã«ããŸãã
空ã®toggleLineChartã¡ãœããã次ã®ã³ãŒãã«çœ®ãæããŸãã
@IBAction func toggleLineChart(sender: UIButton) { if lineChartIsVisible { lineChartHeightConstraint.constant = 0 let transform = CGAffineTransformMakeRotation(0) toggleLineChartButton.transform = transform lineChartIsVisible = false } else { lineChartHeightConstraint.constant = 98 let transform = CGAffineTransformMakeRotation(CGFloat(180.0 * M_PI/180.0)) toggleLineChartButton.transform = transform lineChartIsVisible = true } }
ãã®ã¡ãœããã¯ã æãç·ã°ã©ããã¥ãŒã®ã¢ã³ã«ãŒã®é«ãã®äžå®å€ãå¶åŸ¡ããŠããŠã£ã³ããŠã®ãµã€ãºãå€æŽããŸãã ãŸãããã¿ã³ã«å±éå€æãé©çšãããã£ãŒãã®å¯èŠæ§ãæ£ç¢ºã«è¡šç€ºããŸãã
ãã€ã³ãã£ã³ã°ãæŽæ°ããåŸããã£ãŒãããŒã¿ãåããŒãããŠãæ°ããã¬ã€ã¢ãŠãã§åæç»ããå¿ èŠããããŸãã
ããã¯ãviewDidLayoutSubviews ã¡ãœãã㧠TodayViewControllerã«è¿œå ããããšã§å®è¡ã§ããŸãã
override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() updatePriceHistoryLineChart() }
BTC Widgetã¹ããŒã ãéžæãããŠããããšã確èªããã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠå®è¡ããŸãã 次ã«ãããã³ããã衚瀺ãããããèµ·åããã¢ããªã±ãŒã·ã§ã³ãšããŠTodayãéžæããŸãã
å·ŠåŽã«ã¯ããã£ãŒããé衚瀺ã®ãšãã«ãŠã£ãžã§ãããã©ã®ããã«è¡šç€ºããããã衚瀺ãããŸãã å³åŽã«ããŠã£ãžã§ããããéããããšãã®è¡šç€ºã衚瀺ãããŸãã æ¬åœã«çŽ æŽãããïŒ
ç·ã®è²ããã°ããå€æŽãããšã1ã€ã®ãŠã£ãžã§ãããäœæãããŸãã TodayViewControllerã«æ¬¡ãè¿œå ããŸãã
override func lineChartView(lineChartView: JBLineChartView!, colorForLineAtLineIndex lineIndex: UInt) -> UIColor! { return UIColor(red: 0.17, green: 0.49, blue: 0.82, alpha: 1.0) }
ãŸã éžæãããŠããã¹ããŒããæ£ããããšã確èªããŠãã ããã ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠå®è¡ããŸãã ããã³ããã衚瀺ãããããèµ·åããã¢ããªã±ãŒã·ã§ã³ãšããŠTodayãéžæããŸãã
æåŸã®èŠä»¶ã¯ããŠã£ãžã§ããã衚瀺ãããŠããªããšãã«ãã¥ãŒãæŽæ°ããã·ã¹ãã ãã¹ãããã·ã§ãããäœæã§ããããã«ããããã«ããŠã£ãžã§ãããããããµããŒãããå¿ èŠãããããšã§ãã ã·ã¹ãã ã¯å®æçã«ãããå®è¡ããŠããŠã£ãžã§ãããçŸåšã®èŠä»¶ãæºããã®ãæ¯æŽããŸãã
widgetPerformUpdateWithCompletionHandlerã¡ãœããã®æ¢åã®å®è£ ã次ã®ã³ãŒãã«çœ®ãæããŸãã
func widgetPerformUpdateWithCompletionHandler(completionHandler: ((NCUpdateResult) -> Void)!) { fetchPrices { error in if error == nil { self.updatePriceLabel() self.updatePriceChangeLabel() self.updatePriceHistoryLineChart() completionHandler(.NewData) } else { completionHandler(.NoData) } } }
ãã®ã¡ãœããã¯ã次ã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
- fetchPricesãåŒã³åºããŠãWebãµãŒãã¹ããçŸåšã®äŸ¡æ ŒããŒã¿ãååŸããŸãã
- ãšã©ãŒããªãå Žåãã€ã³ã¿ãŒãã§ã€ã¹ã¯åžžã«æŽæ°ãããŸãã
- æåŸã«ãããã³NCWidgetProvidingãããã³ã«ã®èŠä»¶ã«åŸã£ãŠããã®é¢æ°ã¯ã.NewDataåæã§ã·ã¹ãã ã«æäŸãããå®äºãããã¯ãåŒã³åºããŸãã
- ãšã©ãŒãçºçããå Žåãçµäºãããã¯ã¯.Failedåæã䜿çšããŠåŒã³åºãããŸã ã ããã«ãããæ°ããããŒã¿ãå©çšã§ãããæ¢åã®ã¹ãããã·ã§ããã䜿çšããå¿ èŠãããããšãã·ã¹ãã ã«éç¥ãããŸãã
ãããŠãæ¡åŒµæ©èœToday Todayæ¡åŒµæ©èœã®äœæãå®äºããŸããã æçµãã©ããã¯ãã¡ãããããŠã³ããŒãã§ããŸãã
ããã§ã¯ã次ã¯äœã§ããïŒ
iOS 8ã®éç¥ã»ã³ã¿ãŒã¯ãããªãã ãã®éã³å Žã§ãïŒ ãŠã£ãžã§ããã¯é·å¹Žã«ããã£ãŠä»ã®ã¢ãã€ã«ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§å©çšå¯èœã§ãããã Appleã¯ã€ãã«ããããäœæããæ©äŒãããªãã«äžããŸããã
ã€ãã·ã¢ããéçºè ãšããŠãæ¢åã®ã¢ããªã±ãŒã·ã§ã³ãããäžåºŠèŠãŠããŠã£ãžã§ããã䜿çšããŠããããæŽæ°ããæ¹æ³ãèããŠãã ããã å ã«é²ãã§ããŠã£ãžã§ããã掻çšããã¢ããªã±ãŒã·ã§ã³ã®æ°ããã¢ã€ãã¢ãèããŠãã ããã
ä»ã®çš®é¡ã®iOS 8 App Extensionsã®äœæã«ã€ããŠè©³ããç¥ãããå Žåã¯ãiOS 8 by Tutorialsã®æ¬ãèªãã§ãã ãããPhotoExtensionsã Share Extensions ã Action Extensionsãªã©ã«ã€ããŠåŠã¶ããšãã§ããŸãã
ç§ãã¡ã¯ããªããæãã€ãããã®ãèŠãã®ãåŸ ã€ããšãã§ããŸããããããŠããªãã®Today Extensionsãè¿ãå°æ¥ç§ãã¡ã®éç¥ã»ã³ã¿ãŒã®ãããã«æ¥ãããšãæã¿ãŸãïŒ