
AsyncDisplayKitïŒãã¯ã¹ãã£ïŒèšäºã·ãªãŒãºã®ç¬¬2éšãžããããïŒ
AsyncDisplayKitãã«ãã·ã¹ãã ã䜿çšãããšãéåžžã«é«éãªå®£èšåã³ãŒããèšè¿°ã§ããŸãã
ã¯ã€ãã¯èšå®ã«å ããŠãã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããŠããããã€ã¹ã«èªåçã«é©å¿ããŸãã ã¢ããªã±ãŒã·ã§ã³ã®View Controllerã§ããŸãã¯iPadçšã¢ããªã±ãŒã·ã§ã³ã®ããããªãŒããŒãšããŠäœ¿çšã§ããããŒããäœæããããšããŠãããšããŸãã ã¬ã€ã¢ãŠããæ£ããäœæãããŠããã°ãã¬ã€ã¢ãŠãã®åºæ¬ã³ãŒããå€æŽããããšãå¿é
ããã«ããŒãããã®æ°ããç°å¢ã«è»¢éã§ããŸãïŒ

ãã®AsyncDisplayKit 2.0ãã¥ãŒããªã¢ã«ã§ã¯ã æåã®éšåããCardNodeã¯ã©ã¹ã«æ»ããäœæã«äœ¿çšãããã¬ã€ã¢ãŠãä»æ§ã«ã€ããŠåŠç¿ããŸãã ã¬ã€ã¢ãŠãä»æ§ãäœæããŠãç®çã®çµæãåŸãããšãã©ãã»ã©ç°¡åããããããŸãã
èªåã¬ã€ã¢ãŠãã®åé¡
ãèªåã¬ã€ã¢ãŠãã®äœãåé¡ãªã®ã§ããïŒããšå«ãã§ããã®ãèãããŸããèªåã¬ã€ã¢ãŠãã§ã¯ãäœæããåã³ã¹ãã©ã€ã³ã¯ãé£ç«æ¹çšåŒã®æ¹çšåŒãšããŠè¡šç€ºãããŸãã ããã¯ãå®æ°ãè¿œå ãããã³ã«ãå®æ°ãææ°é¢æ°çã«èšç®ããæéãé·ããªãããšãæå³ããŸãã ãã®èšç®ã¯åžžã«ã¡ã€ã³ã¹ã¬ããã§å®è¡ãããŸãã
ASDKèšèšã®ç®æšã®1ã€ã¯ãUIKit APIã«å¯èœãªéãå¿ å®ã«åŸãããšã§ãã æ®å¿µãªãããèªåã¬ã€ã¢ãŠãã¯äžéæãªã·ã¹ãã ã§ãããå¥ã®ã¹ã¬ããã§constãèšç®ããæ¹æ³ã¯ãããŸããã
ããå§ããŸããã
éå§ããã«ã¯ã ããããã¹ã¿ãŒã¿ãŒãããžã§ã¯ããããŠã³ããŒãããŸã ã ã¬ã€ã¢ãŠãã®ä»æ§ã®äžéšãåŠç¿ããã®ã§ãæåã®AsyncDisplayKit 2.0ãã¥ãŒããªã¢ã«ã®å®æåã®ä¿®æ£çããå§ãã䟡å€ããããŸãã
泚 ïŒAsyncDisplayKit 2.0ãã¥ãŒããªã¢ã«ã§äœæ¥ãéå§ããåã«ã æåã®ããŒãããèªã¿ãã ããã
ASLayoutSpecã®çŽ¹ä»
å§ããåã«ãå°ãèæ¯ã説æããŸãã
ã¬ã€ã¢ãŠãä»æ§ã¯ãã¬ã€ã¢ãŠãã·ã¹ãã ãäžè¬åãããã®ã§ããããã«ã€ããŠã¯ã Building Paper Eventã§ç°¡åã«èª¬æããŠããŸãã ã¢ã€ãã¢ã¯ãããŒããšãµãããŒãã®æ¬¡å
ãšäœçœ®ã®èšç®ãšé©çšãçµ±äžããããããåå©çšã§ããããã«ããããšã§ãã
ASDK 1.9.Xã§ã¯ãéåæã¬ã€ã¢ãŠããäœæã§ããŸããããã¬ã€ã¢ãŠãã³ãŒãã¯UIKitã®äºåèªåã¬ã€ã¢ãŠãã«äŒŒãŠããŸãã ã ããŒããµãããŒãã®ãµã€ãºã¯ã -calculateSizeThatFitsïŒã¡ãœããã䜿çšããŠèšç®ã§ããŸãã ãããã®ãµã€ãºããã£ãã·ã¥ããåŸã§-layoutã«è¿œå ã§ããŸãã ãŸããããŒãã®äœçœ®ã¯ãå€ãè¯ãæ°åŠã䜿çšããŠèšç®ããå¿
èŠããããŸãã-誰ãæ°åŠãå°ç¡ãã«ããããªã

ã¬ã€ã¢ãŠãä»æ§
ASDK 2.0ã§ã¯ãASDisplayNodeã®ãµãã¯ã©ã¹ã¯-layoutSpecThatFitsïŒãå®è£
ã§ããŸãã ã¯ã©ã¹ãªããžã§ã¯ãASLayoutSpecã¯ããã¹ãŠã®ãµãããŒãã®ãµã€ãºãšäœçœ®ã決å®ããŸãã ã¬ã€ã¢ãŠãä»æ§ã¯ã芪ããŒãã®ãµã€ãºã決å®ããŸãã
ããŒãã¯ã -layoutSpecThatFitsïŒããã¬ã€ã¢ãŠãä»æ§ãªããžã§ã¯ããè¿ããŸãã ãã®ãªããžã§ã¯ãã¯ãããŒãã®ãµã€ãºãããã³ãã®ãã¹ãŠã®ãµãããŒãã®ãµã€ãºãšäœçœ®ãååž°çã«æ±ºå®ããŸãã
ThatFitsåŒæ°ã¯ãã¯ã©ã¹ASSizeRangeã®ãªããžã§ã¯ãã§ãã ããã«ã¯ãããŒãã®æå°ãµã€ãºãšæ倧ãµã€ãºã決å®ããCGSizeåã®2ã€ã®ããããã£ïŒæå°ãšæ倧ïŒããããŸãã
ASDKã¯ããŸããŸãªçš®é¡ã®ä»æ§ãæäŸããŸãã ãããã®ããã€ãã次ã«ç€ºããŸãã
- ASStackLayoutSpec ïŒåã®åçŽãŸãã¯æ°Žå¹³ã¹ã¿ãã¯ãå®çŸ©ããŸãã justifyContentããããã£ã¯ãã¹ã¿ãã¯æ¹åã®åéã®è·é¢ã決å®ãã alignItemã¯å察ã®è»žã«æ²¿ã£ãåã®è·é¢ã決å®ããŸãã ãã®ä»æ§ã¯ãUIKit UIStackViewãšåæ§ã«æ§æãããŸãã
- ASOverlayLayoutSpec ïŒããã¬ã€ã¢ãŠãèŠçŽ ãå¥ã®ã¬ã€ã¢ãŠãèŠçŽ ã«åŒã䌞ã°ãããšãã§ããŸãã ããããªãŒããŒã¬ã€ãããªããžã§ã¯ãã¯ããããæ©èœããããã«åºæã®ã³ã³ãã³ããµã€ãºãæã£ãŠããå¿
èŠããããŸãã
- ASRelativeLayoutSpec ïŒäœ¿çšå¯èœãªã¹ããŒã¹å
ã®çžå¯Ÿäœçœ®ã«ã¢ã€ãã ãé
眮ããŸãã 9ã€ã®ã¹ã©ã€ã¹ç»åã®9ã€ã®ã»ã¯ã·ã§ã³ãèããŠãã ããã ãããã®ã»ã¯ã·ã§ã³ã®ããããã«ãªããžã§ã¯ããé
眮ã§ããŸãã
- ASInsetLayoutSpec ïŒæ¢åã®ãªããžã§ã¯ãã®ã€ã³ãã³ããèš±å¯ããŸãã ã»ã«ã®åšãã«å€å
žçãªãiOS 16ãã¯ã»ã«ã®ã€ã³ãã³ãããå¿
èŠã§ããïŒ åé¡ãããŸããïŒ
ASLayoutElementãããã³ã«
ã¬ã€ã¢ãŠãä»æ§ã¯ã1ã€ä»¥äžã®åã®ã¬ã€ã¢ãŠããå¶åŸ¡ããŸãã èŠçŽ ã¯ã ASTextNodeãASImageNodeãªã©ã®ããŒãã«ããããšãã§ããŸãã ããŒãã«å ããŠãåã¬ã€ã¢ãŠãä»æ§ãã³ãã¬ãŒããç°ãªãã¬ã€ã¢ãŠãä»æ§ã«ãªãå ŽåããããŸãã
ãããã©ããã£ãŠãããå¯èœã§ããïŒ
ã¬ã€ã¢ãŠãä»æ§ã®åèŠçŽ ã¯ã ASLayoutElementãããã³ã«ã«æºæ ããå¿
èŠããããŸãã ASLayoutSpecãšASDisplayNodeã¯ASLayoutElementã«å¯Ÿå¿ããŠãããããåãšãã®ãµãã¯ã©ã¹ã®äž¡æ¹ãåã«ããããšãã§ããŸãã

ãã®ã·ã³ãã«ãªã³ã³ã»ããã¯éåžžã«åŒ·åã§ãã æãéèŠãªã¬ã€ã¢ãŠãæ©èœã®1ã€ã¯ASStackLayoutSpecã§ãã ç»åãšããã¹ããé
眮ããæ©èœã¯1ã€ã§ãããç»åãšå¥ã®ã¹ã¿ãã¯ãé
眮ããæ©èœã¯å¥ã§ãã
ããªãã¯çµ¶å¯Ÿã«æ£ããã§ãã 決éã®æãæ¥ãŸããïŒ ã€ãŸããã³ãŒããæžã...

åç©ã®ç»åãé
眮ãã
ã§ããããããªãã¯ä»äºãããŠããŠããã¶ã€ããŒã¯ããªããåãçµãã§ããæ°ããã¢ããªã±ãŒã·ã§ã³ãåç©ã®ããã®çŸç§äºå
žãã®ããã«åœŒãæããã®ã®ã¹ã¯ãªãŒã³ã·ã§ãããéã£ãŠããŸããã

æåã«è¡ãããšã¯ãå
šäœçãªã¬ã€ã¢ãŠããç解ããããã«ãç»é¢ãé©åãªã¬ã€ã¢ãŠãä»æ§ã«åå²ããããšã§ãã ããã¯æã«ã¯æ··ä¹±ãæãå¯èœæ§ããããŸãããã¬ã€ã¢ãŠãã®åšåã¯é
眮ã®å®¹æãã«äŸåããããšãå¿ããªãã§ãã ããã ã·ã³ãã«ã«å§ããŸãããã
ä»åŸã¯ãäžååãšäžååãäžç·ã«ã¹ã¿ãã¯äžã§å®å
šã«æ©èœãããšèšããŸãã ãããããã£ãã®ã§ã2ã€ã®ååãå¥ã
ã«é
眮ããŠãæåŸã«çµåã§ããŸãã
ã¹ã¿ãŒã¿ãŒãããžã§ã¯ãã解åãã RainforestStarter.xcworkspaceãéããŸãã CardNode.mã®-layoutSpecThatFitsïŒã¡ãœããã«ç§»åããŸãã çŸåšã¯ã空ã®ASLayoutSpecãªããžã§ã¯ããè¿ãã ãã§ãã
ãããžã§ã¯ããã³ã³ãã€ã«ããŠå®è¡ãããšã次ã®ããã«è¡šç€ºãããŸãã

ããŠãããã¯ã»ãã®å§ãŸãã§ãã æåã«åç©ã®ç»åã衚瀺ããŠã¿ãŠã¯ã©ãã§ããïŒ
ããã©ã«ãã§ã¯ããããã¯ãŒã¯ã€ã¡ãŒãžããŒãã«ã¯ã³ã³ãã³ãããªããããç¬èªã®ãµã€ãºããããŸããã ã¹ã¯ãªãŒã³ã·ã§ãããèŠããšãåç©ã®ç»åã¯ç»é¢ã®å¹
å
šäœãšé«ãã®2/3ãå ããå¿
èŠããããšèšããŸãã
ãããè¡ãã«ã¯ãæ¢åã®returnã¹ããŒãã¡ã³ãã次ã®ã¹ããŒãã¡ã³ãã«çœ®ãæããŸãã
åçªå·ã®ã³ã¡ã³ããé çªã«æ€èšããŠãã ããã
- æ¯çã®èšç® ïŒæåã«ãç»åã«é©çšããæ¯çã決å®ããŸãã æ¯çã¯é«ã/å¹
ã«ãã£ãŠæ±ºãŸããŸãã ããã§ã¯ããã®ç»åã®é«ããæå°ã»ã«ã®é«ããã€ãŸãç»é¢ã®é«ãã®2/3ã§ããããšã瀺ããŸãã
- æ¯çã¬ã€ã¢ãŠãä»æ§ã®äœæ ïŒæ¬¡ã«ãèšç®ãããé¢ä¿ãšåanimalImageNodeã䜿çšããŠãæ°ããASRatioLayoutSpecãäœæããŸãã
- ä»æ§ãè¿ã ïŒè¿ãããimageRatioSpecã¯ãã»ã«ã®é«ããšå¹
ã決å®ããŸãã
ã³ã³ãã€ã«ããŠå®è¡ããã¬ã€ã¢ãŠããã©ã®ããã«èŠãããã確èªããŸãã

ãšãŠãç°¡åã§ããã ç»åã¯ãµã€ãºãæã€å¯äžã®èŠçŽ ã§ãããããã»ã«ã¯ããã«åãããŠäŒžçž®ããŸãã
泚 ïŒããŒãã«ããŒãã»ã«ã«æž¡ãããconstrainedSizeã¯ãæå°å€ïŒ0ã0ïŒãšæ倧å€ïŒ tableNodeWidthãINF ïŒã§æ§æãããŸãã ãããã£ãŠã preferredFrameSizeã䜿çšããŠç»åã®é«ãã決å®ããå¿
èŠããããŸãã preferredFrameSizeã¯ãããŒã1ã§AnimalPagerControllerã«èšå®ãããŸããã
ã°ã©ããŒã·ã§ã³ãè¿œå
åç©ã®ç»åãã§ããã®ã§ã次ã®ã¹ãããã¯ãã°ã©ããŒã·ã§ã³ããŒãããã®äžã«è¿œå ããããšã§ãã
ASOverlayLayoutSpecã¯ããžã§ãã®åãªãä»æ§ã§ãã
imageRatioSpecãåæåããåŸãæåã«æ¬¡ã®è¡ãè¿œå ããŸãã
ASOverlayLayoutSpec *gradientOverlaySpec = [ASOverlayLayoutSpec overlayLayoutSpecWithChild:imageRatioSpec overlay:self.gradientNode];
ã¬ã€ã¢ãŠãä»æ§ãäœæãããšãæ®ããå«ãä»æ§ãåžžã«ååŸãããŸãã gradientOverlaySpecã®æéã§ãã
çŸåšã®ãªã¿ãŒã³ã次ã®ãã®ã«çœ®ãæããŸãã
return gradientOverlaySpec;
ã³ã³ãã€ã«ããŠå®è¡ããåimageNodeãªããžã§ã¯ãã«åºããã°ã©ããŒã·ã§ã³ã確èªããŸãã
ãã¹ãŠã®é³¥ã®åŸé
ã¯çŽ æŽãããã§ãïŒ

åç©åã®ããã¹ããè¿œå
ããšã¯ãåç©ã®ååãè¿œå ããã ãã§ãã
ã¿ã¹ã¯ã¯ç°¡åã«æããŸãããèæ
®ãã¹ãèŠä»¶ãããã€ããããŸãã
- ååã¯ã°ã©ããŒã·ã§ã³ã®äžã«é
眮ããå¿
èŠããããŸãã
- ååã¯åç©ã®ç»åã®å·Šäžé
ã«ããå¿
èŠããããŸãã
- ã€ã³ãã³ã-å·Šã«16ãã€ã³ããäžã«8ãã€ã³ãã
ããã¹ããäžçªäžã«é
眮ããæ¹æ³ã¯ãã§ã«ç¥ã£ãŠããŸãã å®èšŒæžã¿ã®çã®ãªãŒããŒã¬ã€ä»æ§ããè±åŽããæãæ¥ãŸããã
gradientOverlaySpecã®çŽåŸã«æ¬¡ã®è¡ãè¿œå ããŸã
ASOverlayLayoutSpec *nameOverlaySpec = [ASOverlayLayoutSpec overlayLayoutSpecWithChild:gradientOverlaySpec overlay:self.animalNameTextNode];
ããã«ã returnã¹ããŒãã¡ã³ãã次ã®ããã«å€æŽããå¿
èŠããããŸãã
return nameOverlaySpec;
ã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠå®è¡ããç»é¢äžã®ããã¹ãã確èªããŸãã

æªããªãã ãã®ããã¹ããäžé
ã«ç§»åããã ãã§ãã
ããªããééããäžè¬çãªã±ãŒã¹ã«èšåãã䟡å€ããããŸãã ããªãã¯é³¥ã«ããã¹ããæã£ãŠããã®ã§ãèªç¶ãªæ¬²æ±ã¯ãä»ã®ä»æ§ã§OverlaySpecãã©ããããŠã 奜ããªå Žæã«çœ®ãããšã§ãã ååãšããŠãäžæ©åŸéããŠãããªããè¡šçŸããããšããŠããããšã«ã€ããŠèããå¿
èŠããããŸãã
ãã®å Žåã nameOverlaySpecã䜿çšããŠãæ¢åã®ã³ã³ãã³ãã®äžã«ããä»ã®ãã®ãæ¡åŒµããŸãã
å®éãã³ã³ãã³ãã®ã¿ã€ãã«ãæ¡åŒµããããããŸããã 空ãé åã®å·Šäžé
ã«ããããšãååã«äŒãããã®ã¬ã€ã¢ãŠãä»æ§ãå©çšå¯èœãªé åã«æ¡åŒµããŸãã
ASRelativeLayoutSpecã®çŽ¹ä»
å®éã«ã¯ASRelativeLayoutSpecãå¿
èŠã§ã ã
ASRelativeLayoutSpecã¯ASLayoutElementåãåãå
¥ããããã䜿çšå¯èœãªã¹ããŒã¹ãèæ
®ããŠãæ瀺ã«åŸã£ãŠãã®åãé
眮ããŸãã
çžå¯Ÿä»æ§ãå®çŸ©ãããšããããããã£verticalPositionããã³horizoâântalPositionãèšå®ã§ããŸãã
ãããã®2ã€ã®ããããã£ã¯æ¬¡ã®ãšããã§ãã
- ASRelativeLayoutSpecPositionStart
- ASRelativeLayoutSpecPositionCenter
- ASRelativeLayoutSpecPositionEnd
ãã®çµã¿åããã«ããããªããžã§ã¯ããã³ãŒããŒããšããžã®ããããããŸãã¯äœ¿çšå¯èœãªã¹ããŒã¹ã®äžå€®ã«é
眮ã§ããŸãã
æŒç¿ãšããŠããã®ã«ãšã«ã空ãé åã®å³ç«¯ã«ã©ã®ããã«é
眮ããŸããïŒ

ãverticalPositionãASRelativeLayoutSpecPositionCenterã«èšå®ãã horizoâântalPositionãASRelativeLayoutSpecPositionEndã«èšå®ããšèšã£ãå Žåãããªãã¯æ£ããã§ãïŒ
ç·Žç¿ãçµãã£ãã®ã§ã次ã®è¡ã¯ããå°ãæå³ããããŸãã nameOverlaySpecã®çŽåã«æ¬¡ã®è¡ãè¿œå ããŸã ã
ASRelativeLayoutSpec *relativeSpec = [ASRelativeLayoutSpec relativePositionLayoutSpecWithHorizontalPosition:ASRelativeLayoutSpecPositionStart verticalPosition:ASRelativeLayoutSpecPositionEnd sizingOption:ASRelativeLayoutSpecSizingOptionDefault child:self.animalNameTextNode];
ãããã£ãŠãåã®horizoâântalPositionãstartã«ãverticalPositionãå®äºã«èšå®ããŸãã ã«ãšã«ã®èšèªã§ã¯ã次ã®ããã«ãªããŸãã

çžå¯Ÿä»æ§ãèšå®ãããã®ã§ã nameOverlaySpecå®çŸ©ã次ã®ããã«å€æŽããŸãã
ASOverlayLayoutSpec *nameOverlaySpec = [ASOverlayLayoutSpec overlayLayoutSpecWithChild:gradientOverlaySpec overlay:relativeSpec];
ã³ã³ãã€ã«ããŠå®è¡ããåŸããããã®ã確èªããŸãã

ãããïŒ ã»ã«ã®ãã®ååã§è¡ãããšããã1ã€ãããŸãã
ASInsetLayoutSpecã®çŽ¹ä»
æåŸã«è¡ãå¿
èŠãããã®ã¯ãåç©ã®ååã16ãã€ã³ãå·Šã«ã8ãã€ã³ãäžã«çœ®ãããšã§ãã ããã«ã¯ASInsetLayoutSpecããããŸãã
ãªããžã§ã¯ãã®åšå²ã«å°ããªã€ã³ãã³ããè¿œå ããã«ã¯ãæ¿å
¥ä»æ§ã§ãªããžã§ã¯ããã©ãããã UIEdgeInsetsã«å¿
èŠãªã€ã³ãã³ãã決å®ãããŸãã
nameOverlaySpecã®åŸã«æ¬¡ã®è¡ãè¿œå ããŸãã
ASInsetLayoutSpec *nameInsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(0, 16.0, 8.0, 0.0) child:nameOverlaySpec];
次ã«ãæãå€åŽã®ä»æ§ãè¿ãããã«returnã¹ããŒãã¡ã³ããå床å€æŽããŸãã
return nameInsetSpec;
ã³ã³ãã€ã«ããŠå®è¡ããŸãã


ãªãŒããŒã¬ã€ã«ã¯åç©ã®ç»åãå«ãŸããŠããããããªãŒããŒã¬ã€ãèŠãé åå
šäœã«æ¿å
¥ãé©çšããããªãå ŽåããããŸãã
æ¬åœã«å¿
èŠãªã®ã¯ãæ¿å
¥ãrelativeSpecã¹ããŒã¹ã«é©çšããããšã§ãã ãããä¿®æ£ããã«ã¯ããŸãçŸåšã®nameInsetSpecå®çŸ©ãåé€ããŸãã
次ã«ã nameOverlaySpecå®çŸ©ã®çŽåã«ã次ã®æ°ããæ¹è¯ããŒãžã§ã³ãè¿œå ããŸãã
ASInsetLayoutSpec *nameInsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(0, 16.0, 8.0, 0.0) child:relativeSpec];
ããã§ã relativeSpecã§ã¯ãªãnameOverlaySpecãæ°ããæ¿å
¥ããªãŒããŒã¬ã€ããå¿
èŠããããŸãã nameOverlaySpecã®å®çŸ©ã次ã®ããã«çœ®ãæããŸãã
ASOverlayLayoutSpec *nameOverlaySpec = [ASOverlayLayoutSpec overlayLayoutSpecWithChild:gradientOverlaySpec overlay:nameInsetSpec];
æåŸã«ã以äžã«æ»ããŸãã
return nameOverlaySpec;
ã³ã³ãã€ã«ããŠå®è¡ããäœãèµ·ãã£ããã確èªããŸãã

ååã®äœæ¥ãå®äºããŸããïŒ
äžåå
åŸåã¯å°ãç°¡åã§ãã ããã¯ããã®åšãã«æ¿å
¥ç©ãããåç©ã®åãªã説æã§ã...ãããŠããªãã¯ãã§ã«ãããè¡ãæ¹æ³ãç¥ã£ãŠããŸãã
returnæã®åã«æ¬¡ã®è¡ãè¿œå ããŠã説æããã¹ããå«ãæ¿å
¥ãäœæããŸãã
ASInsetLayoutSpec *descriptionTextInsetSpec = [ASInsetLayoutSpec insetLayoutSpecWithInsets:UIEdgeInsetsMake(16.0, 28.0, 12.0, 28.0) child:self.animalDescriptionTextNode];
ãã®æ¿å
¥ãè¿ããã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ããŠèµ·åãããšã次ã®ããã«è¡šç€ºãããŸãã

ããã¯ãŸãã«ããªããæãã§ãããã®ã§ãã äž¡æ¹ã®ååãããã£ãã®ã§ãããããçµã¿åãããã®ã¯é£ãããããŸããã
ã³ã³ãã³ãã®å
éšå¯žæ³
ããã¹ããã¹ããŒã¹ãåããããã«ã³ã³ãã³ãã®ãµã€ãºãæã£ãŠããããšãå¿é
ããå¿
èŠã¯ãããŸããã ããã¯ã ASTextNodeãããã¹ããšå±æ§ã«åºã¥ããŠç¬èªã®å
éšã³ã³ãã³ããµã€ãºãæã£ãŠããããã§ãã
次ã®ããŒãã«ã¯ããã©ã«ãã®ãµã€ãºã¯ãããŸããã
- ASDisplayNodeã®ãµãã¯ã©ã¹
- ASNetworkImageNodeããã³ASMultiplexImageNode
- ASVideoNodeããã³ASVideoPlayerNode
äžè¬çã«ã¯ããããã®ããŒãã«ã¯å
ã®ã³ã³ãã³ãããªããããç¬èªã®ãµã€ãºã決å®ããæ¹æ³ã¯ãããŸããã 䜿çšããç¹å®ã®ãµã€ãºãèšå®ããåã«ã preferredFrameSizeãæã€ããã¬ã€ã¢ãŠãä»æ§ã«é
眮ããå¿
èŠããããŸãã
ASStackLayoutSpecã®çŽ¹ä»
ããã¯ãã¹ã¿ãã¯ã¬ã€ã¢ãŠãä»æ§ã䜿çšããã®ã«æé©ãªææã§ãã ããã¯UIStackViewãšåçã®ã¬ã€ã¢ãŠãä»æ§ãšããŠãšãããããšãã§ããŸãããèªååŸæ¹äºææ§ã¯éåžžã«ãšã¬ã¬ã³ãã§ãã
ã¹ã¿ãã¯ã¯ãåçŽãšæ°Žå¹³ã®äž¡æ¹ã§å®çŸ©ã§ããŸãã ä»ã®ãã¹ãŠã®äººãšåæ§ã«ãã¬ã€ã¢ãŠãä»æ§ã¯ããŒããŸãã¯ä»ã®ããŒã¯ã¢ãããåãšããŠåãå
¥ããããšãã§ããŸãã
ãã®ã¹ã¿ãã¯ãæ§æããã«ã¯ãæ¿å
¥ã®èª¬æãå®çŸ©ããåŸã次ã®3è¡ãè¿œå ããŸãã
ASStackLayoutSpec *verticalStackSpec = [[ASStackLayoutSpec alloc] init]; verticalStackSpec.direction = ASStackLayoutDirectionVertical; verticalStackSpec.children = @[nameOverlaySpec, descriptionTextInsetSpec];
ããã§ã¯ãæ¹åãåçŽã«èšå®ããäžååãšäžååãåãšããŠè¿œå ããŠãã¹ã¿ãã¯ãäœæããŸãã
ãããŠåã³ãæ°ããã¬ã€ã¢ãŠãä»æ§ãè¿ããŸãã
return verticalStackSpec;
ã³ã³ãã€ã«ããŠå®è¡ããŸãã ã»ãŒå®äºïŒ

泚 ïŒåè¿°ã®ããã«ãã¹ã¿ãã¯ã¯æãéèŠãªã¬ã€ã¢ãŠãä»æ§ã®1ã€ã§ãã ã»ãšãã©ã®ã¬ã€ã¢ãŠãã¯ãã¹ã¿ãã¯ãŸãã¯äžé£ã®ãã¹ããããã¹ã¿ãã¯ãšããŠè¡šçŸã§ããŸãã
ãããããç¬èªã®justifyContentããã³alignItemsèšå®ãæã£ãŠãããã¹ãã¹ã¿ãã¯ã¯ãéåžžã«è¡šçŸåããããéåžžã«å€±æããå¯èœæ§ãããããšãæå³ããŸã ã ãã詳现ãªèª¿æ»ã«ã€ããŠã¯ã ãã¬ãã¯ã¹ããã¯ã¹ã«ãšã«ã²ãŒã ãšAsync Display Kitã®ããã¥ã¡ã³ãã確èªããŠãã ããã
ASBackgroundLayoutSpecã®çŽ¹ä»
ãªãŒããŒã¬ã€ã®ä»æ§ãèŠããŠããŸããïŒ ã«ãŒã«ã®1ã€ã¯ãããã«éãããªããžã§ã¯ãã¯ç¬èªã®ãµã€ãºãæããªããã°ãªããªããšããããšã§ãã
åŸãã®èŠçŽ ããµã€ãºã決å®ããåã®èŠçŽ ãã¡ããã©ãã®äžã«äŒžã³ãŸãã
ããã¯ã°ã©ãŠã³ãã®ä»æ§ã¯ãŸã£ããéã§ãã ç¬èªã®ãµã€ãºãå®çŸ©ã§ããèŠçŽ ãšããã®èŠçŽ ã®åŸã«æ¡å€§ãããèŠçŽ ãããå Žåãèæ¯ã®æå®ãå¿
èŠã«ãªããŸãã
ãã®å Žåãèæ¯ã¬ã€ã¢ãŠãä»æ§ã䜿çšããŠããŒãããåç©ã®ç»åãåŒã䌞ã°ãå¿
èŠããããŸãã
ãããè¡ãã«ã¯ã次ã®è¡ãè¿œå ããŸãã
ASBackgroundLayoutSpec *backgroundLayoutSpec = [ASBackgroundLayoutSpec backgroundLayoutSpecWithChild:verticalStackSpec background:self.backgroundImageNode];
ãããŠã returnã¹ããŒãã¡ã³ãã眮ãæããŸã
return backgroundLayoutSpec;
ã³ã³ãã€ã«ããŠå®è¡ããäœãèµ·ãã£ããã確èªããŸãã

å®æãããããžã§ã¯ãã¯ãã¡ãããå
¥æã§ããŸãã Swiftçšã®ããŒãžã§ã³ãããããšãç¹°ãè¿ããŸãã
ãããã®æŠå¿µãç解ããããããã¥ã¡ã³ãã®èª¿æ»ãéå§ããŸãã ããã¯ãã¬ã€ã¢ãŠãã·ã¹ãã ã§äœãã§ãããã«ã€ããŠã®ã»ãã®å°ããªæŠèŠã§ããã
ãã®AsyncDisplayKit 2.0ãã¥ãŒããªã¢ã«ãã楜ãã¿ãã ããã質åãããå Žåã¯ãã³ã¡ã³ãã«èªç±ã«æ®ããŠãã ããã
PSèšäºã®ç¿»èš³ã«ååããŠãããBeataSunshineãševgenã«æè¬ããŸãã