ãHabrahabrãã®èªè
ã«ãraywenderlich.comãµã€ãã®èšäºãFramerã䜿çšããiOSã¢ãã¡ãŒã·ã§ã³ã®ãããã¿ã€ã ãã®ç¿»èš³ãæäŸããŸããéçã§åãã®ãªããããã¿ã€ãã¯ãæ§ããã«èšã£ãŠãåžã蟌ã¿ãŸãã éçãããã¿ã€ãã䜿çšãããšãèŠèŠçãªãã¶ã€ã³ã衚瀺ã§ããŸãããçžäºäœçšã®ãã¶ã€ã³ã¯è¡šç€ºã§ããŸããã
ã¢ããªã±ãŒã·ã§ã³ã®çžäºäœçšèšèšã®éèŠæ§ãèãããšãéçãªãããã¿ã€ãã¯ããŒã¹ãæ¬ ããŠããããºã«ã®ãããªãã®ã§ãããšèšããŸãã ã§ã¯ã誰ãããã®ãã¹ãŠã®ä»£ããã«ã€ã³ã¿ã©ã¯ãã£ããªãããã¿ã€ããäœæããªãã®ã¯ãªãã§ããïŒ ããŠãAfter Effectsã®ãããªãŠãŒãã£ãªãã£ã§ã¯ããããã¿ã€ãã³ã°ã«æéãããããããå ŽåããããŸãã ãããŠããããã¿ã€ãèªäœã¯å¿
èŠãªããããããŸããã
Framerã詊ããŠãã ããïŒãã¶ã€ããŒãšéçºè
åãã®ãŠãŒãã£ãªãã£ã¯éåžžã«äœ¿ããããã§ãã
ãã®Framerãã¥ãŒããªã¢ã«ã§ã¯ã
Volegã«ãã£ãŠäœæãããã¢ãã¡ãŒã·ã§ã³ã¡ãã¥ãŒãäœæã
ãŸã ã
æãè峿·±ãéšåã«çŠç¹ãåœãŠãŸã-ã¡ãã¥ãŒã®æãããã¿ãšå±éã®ã¢ãã¡ãŒã·ã§ã³ã®ãããã¿ã€ããäœæããŸãã
éå§ãã
ãŸããæ¬¡ã®ããã°ã©ã ãããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããŸãïŒãã®ãã¥ãŒããªã¢ã«ã§ã¯ç¡æã®è©Šçšçã䜿çšã§ããŸãïŒã
ãã¬ãŒããŒãéããŸãã ããããç»é¢ã衚瀺ãããŸãïŒ

[ã¢ãã¡ãŒã·ã§ã³]ïŒå·Šç«¯ã®ã¢ã€ã³ã³ïŒãã¯ãªãã¯ããŠããµã³ãã«ãããžã§ã¯ãã衚瀺ããŸãã

å·ŠåŽãã³ãŒãããã«ãå³åŽããããã¿ã€ãããã«ã§ãã ãããã®éã«ã¯ãã¬ã€ã€ãŒããã«ããããŸãã
ã³ãŒããããŸããããããäœãããããçè§£ããŠã¿ãŠãã ããã çè§£ã§ããªããã®ãæ®ã£ãŠããŠãå¿é
ããªãã§ãã ããã
ãã®ãããžã§ã¯ããéããŸãã ç¬èªã«äœæããŸãã
æ°ãããããã¿ã€ããäœæãã
Framerã§æ°ãããã¡ã€ã«ãäœæããŸãïŒFile->
New ã æ¬¡ã«-
æ¿å
¥ ->
ã¬ã€ã€ãŒãéžæããŠãæ°ãã
ã¬ã€ã€ãŒãäœæããŸãã
ã¬ã€ã€ãŒå±æ§ã®è¡šç€ºããã£ã³ã»ã«ããã«ã¯ãã³ãŒããšãã£ã¿ãŒã®ç©ºã®å Žæãã¯ãªãã¯ããŸãã ããã§ãåããã«ã«æ°ããã¬ã€ã€ãŒã衚瀺ãããŸãã
- ã³ãŒãããã«ã®ã³ãŒããšåæ§
- ã¬ã€ã€ãŒããã«ã®ãªã³ã¯ãšããŠ
- ãããã¿ã€ãããã«ã®ç°è²ã®åè§ã®ãããª

ã¬ã€ã€ãŒããã«ã§ã¬ã€ã€ãŒã®ååã«ã«ãŒãœã«ãåãããŠããããã¿ã€ãäžã®äœçœ®ã確èªããŸãã

ã³ãŒãããŒã§ååã
æ£æ¹åœ¢ã«å€æŽããŸãã

ã³ãŒãã®è¡ã®å·ŠåŽã«ããããã¯ã¹ãã¯ãªãã¯ããŠãã¬ã€ã€ãŒããã«ã§ã¬ã€ã€ãŒã®å±æ§ã衚瀺ããã³å€æŽãããããã¿ã€ãããã«å
ãç§»åããŸãã

åè§åœ¢ããããã¿ã€ãã®äžå¿ã«ãã©ãã°ããã³ãŒãããã«ãšã¬ã€ã€ãŒããã«ã§å€æŽã確èªããŸãã

ãããã¿ã€ããšå¯Ÿè©±ããããšã«ããã¬ã€ã€ãŒã®å€æŽã¯ãã³ãŒãã«ããã«è¡šç€ºãããŸã-éãåæ§ã§ãã ã³ãŒããšããžã¥ã¢ã«ãšãã£ã¿ãŒã®äž¡æ¹ã䜿çšããŠå€æŽãå ããæ©èœã¯ãXcodeããã³Swiftãšã¯å¯Ÿç
§çã«ãFramerã§ã®ãããã¿ã€ãäœæã®å€§ããªå©ç¹ãæäŸããŸãã
æ¢åã®ã³ãŒããåé€ããŠã次ãå
¥åããŸãã
square = new Layer x: 250 y: 542 height: 250 width: 250 backgroundColor: "rgba(255,25,31,0.8)"
ãŸãããããã¿ã€ãã®ãã¹ãŠã倿ŽãããŸããã ãããã§ãããïŒ
çºèšã Javascriptã«ã³ã³ãã€ã«ããã·ã³ãã«ãªèšèªã§ãã
CoffeeScriptã䜿çšããŠãFramerã§ã³ãŒããèšè¿°ããŸãã äžåºŠã䜿çšããããšããªãå Žåã§ãå¿é
ããªãã§ãã ããããã®ã¬ãã¹ã³ããæ§æã«ã€ããŠå€ããåŠã¶ããšãã§ããŸãã
CoffeeScriptã§ã¯ã€ã³ãã³ãã
éèŠã§ããããšã«æ³šæããŠãã ããã ãããã£ãŠãã€ã³ãã³ããç§ã®ã€ã³ãã³ããšäžèŽããããšã確èªããŠãã ãããäžèŽããªãå Žåãã³ãŒãã¯æ©èœããŸããã CoffeScriptã®ã€ã³ãã³ãã¯{}ã眮ãæããŸãã
ã¿ããšã¹ããŒã¹ã¯åããã®ã§ã¯ãããŸããã ããã©ã«ãã§ã¯ãFramerã¯ã¿ãã䜿çšãããããæ¬¡ã®ãããªã¹ããŒã¹ãå«ãã³ãŒãã衚瀺ãããå ŽåïŒ
è¡ã®å
é ã«ããã¹ããŒã¹ãåé€ããã¿ãã«çœ®ãæããŸãã
ã³ãŒããã³ããŒããŠè²Œãä»ããŠæ°ããè¡ã«ç§»åãããšãã¯ã
åžžã«è¡ã®å
é ããåã®ãã¹ãŠ
ãåé€ããŠãã ããã ããããªããšãã³ãŒããä»ã®äœãã®äžéšãšããŠè§£éãããå¯èœæ§ããããŸãã
æåã®ãã¬ãŒããŒã¢ãã¡ãŒã·ã§ã³
éæ³ã®æãæ¥ãŸããã ã¯ãªãã¯ããŠãªã¬ã³ãžè²ã®åã«ããããšã§ãèµ€ãæ£æ¹åœ¢ãäœæããŸãã ã¬ã€ã€ãŒã®èª¬æã®åŸã«ç©ºã®è¡ã远å ããæ¬¡ã貌ãä»ããŸãã
square.onTap -> square.backgroundColor = "rgba(255,120,0,0.8)" square.borderRadius = 150
XcodeãSwiftãããFramerã§ãããã¿ã€ããäœæããæå€§ã®å©ç¹ã¯ã倿Žãè¡ã£ãçŽåŸã«ãããã¿ã€ããšããåãã§ããããšã§ãã Xcodeã§ãããžã§ã¯ãããã«ãããŠå®è¡ããã³ã¹ããããããªãããããããã¿ã€ãã³ã°ã®é床ã倧å¹
ã«åäžããŸãã
ããŠãç§ã¯ããªããäœãèããŠãããç¥ã£ãŠããŸãã ã¢ãã¡ãŒã·ã§ã³ã®é床ãèœãšãå¿
èŠããããŸã-é·ç§»ãæ¥æ¿ãããããããŠãŒã¶ãŒã¯èµ€ãæ£æ¹åœ¢ã«æ»ãããšãã§ããŸããã ããã¯ç°¡åã«ä¿®æ£ã§ããŸãã
ã¯ãªãã¯åŸã«æ£æ¹åœ¢ã«äœãèµ·ããããæå®ãã代ããã«ãæ°ããç¶æ
ã远å ããŸãã
远å ããã³ãŒããããã§çœ®ãæããŸãã
ãããçè§£ããŸãããã
- ããã¯ã squareã®æ°ããorangeCircleç¶æ
ã«ã€ããŠèª¬æããŠããŸãã ãã®æ°ããç¶æ
ã¯ã backgroundColor屿§ãorangeã«ã borderRadiusã150ã«èšå®ããŸã ãããããã£ã®å®å
šãªãªã¹ãã«ã€ããŠã¯ã framer.jsã®ããã¥ã¡ã³ããåç
§ããŠãã ããã
- ããã§ã€ãã³ããèšå®ãããŸã-æŒããšãæ£æ¹åœ¢ã次ã®ç¶æ
ã«ãªããŸãã
æ£æ¹åœ¢ãã¯ãªãã¯ããŠãæ°ããé·ç§»ã衚瀺ããŸãã
ããã§ã圢ç¶ã
ã¢ãã¡ãŒã·ã§ã³åãããŠ
orangeCircleç¶æ
ã«ãªããå
ã®ç¶æ
ã«æ»ããŸãã ããã¯ãç¶æ
ãã¬ã€ã€ãŒã®ç¶æ
ã«ãŒãã«è¿œå ããããã
orangeCircleã®åŸã®æ¬¡ã®ç¶æ
ãããã©ã«ãã®ç¶æ
ã«ãªã£ãŠããããã§ãã
ç¶æ
ããã1ã€è¿œå ããŠã¿ãŸãããã ã»ã¯ã·ã§ã³1ã®åŸã«æ¬¡ã®è¡ã远å ããŸãã
square.states.add greenRounded: backgroundColor: ("green") borderRadius: 50
ãããã¿ã€ãããã«ã®æ£æ¹åœ¢ãã¯ãªãã¯ããŸãã 3ã€ã®ç¶æ
ãã¹ãŠã®ãµã€ã¯ã«ã衚瀺ãããŸãã
ã»ãã®æ°è¡ã®ã³ãŒããšã»ãšãã©ã€ã³ã¹ããŒã«ãªãã§ãã¹ã ãŒãºãªïŒæ»ãããªïŒã¢ãã¡ãŒã·ã§ã³ãäœæããŸããã
UIãªã©ãããè€éã§ã¯ãŒã«ãªãã®ã«é²ãããšãã§ãããšæããŸãã
Framerã䜿çšããŠã¢ãã¡ãŒã·ã§ã³ãäœæããŸãã
äœæããã¢ãã¡ãŒã·ã§ã³ãããäžåºŠèŠãŠã¿ãŸãããã
ã¢ãã¡ãŒã·ã§ã³ãäœæããäžã§æãéèŠãªéšåã¯ãåçŽãªã³ã³ããŒãã³ãã«åè§£ããããšã§ãã ããã¯ãã¢ãã¡ãŒã·ã§ã³ãçè§£ããã ãã§ãªããã¹ããããã€ã¹ãããã®èª¬æãäœæããã®ã«ã圹ç«ã¡ãŸãã ãã®ã¢ãã¡ãŒã·ã§ã³ã§è§£æ±ºãã¹ã3ã€ã®åé¡ããããŸããéžæç¶æ
ãéžæè§£é€ãããã³ãããã®éã®é·ç§»ã§ãã
éžæè§£é€
ãŠãŒã¶ãŒãæåã«èŠããã®ïŒ
- ã¿ãããã4ã€ã®ãããŒã
- åãããŒã«ã¯ãç¬èªã®è²ãã¢ã€ã³ã³ãã¿ã€ãã«ããããŸãã
- åãããŒã¯ããã®äžã®ãããŒã«åœ±ãèœãšããŸãã
éžææžã¿
ãŠãŒã¶ãŒããããŒãã¯ãªãã¯ããåŸã«è¡šç€ºããããã®ïŒ
- è²ãã¿ã€ãã«ãå°ããªã¢ã€ã³ã³ã®ãããããããŒã
- çœãèæ¯ã
- äžéšããã«ã¯ãäžéšã¬ã€ã€ãŒã«åœ±ãèœãšããŸãã
- äžéšã«4ã€ã®åçã«åæ£ãããã¥ãŒ-äžéšã«2ã€ãäžéšã«2ã€ã
- ãã¬ãŒã³ããŒã·ã§ã³ã®è²ã¯ãéžæãããããŒã«ãã£ãŠç°ãªããŸãã
ãŠãŒã¶ãŒã¯ã2ã€ã®ç¶æ
éã®é·ç§»ãéžæããŸãã
éžæè§£é€ç¶æ
ã§ã¯ããŠãŒã¶ãŒã¯è²ä»ãã®ãããŒã®1ã€ãã¿ããããŸãã
éžæç¶æ
ã§ããããããã«ã«ã
éžæè§£é€ããéžæãžã®ç§»è¡

ç§»è¡æã«è¡ãããããšã¯æ¬¡ã®ãšããã§ãã
- 4ã€ã®ãããŒã¯ãã¹ãŠå±éãããäžã«ç§»åããŠã次ã®ãããŒãçµäºãããšããããéå§ããŸãã çµæãšããŠãåãããŒã¯ç»é¢ã®4åã®1ãå ããŸãã
- ãããŒã¯åžžã«é åºä»ããããŠãããããã¯ãªãã¯ããããããŒã¯ã éžæè§£é€ãããç¶æ
ã§ã®ãããŒã®è¡šç€ºæ¹æ³ã«ã¯åœ±é¿ããŸããã
- ãããŒæ¡åŒµã¢ãã¡ãŒã·ã§ã³ã¯ãã£ãããšéå§ãããã®åŸå€§å¹
ã«å éãããã§ãŒãã§çµäºããŸãã
- åãããŒã«ã¯ç¬èªã®åœ±ããããŸãã
- ã¢ã€ã³ã³ã¯ããµã€ãºã®0ãã100ïŒ
ã«æ¡å€§ããŸãã ã¢ãã¡ãŒã·ã§ã³ã¯ããã«å§ãŸãããã§ãŒãã§çµãããŸãã
- ããã¹ãã¯ãæ¡å€§ãããããŒã®äžã4/5ç§»åããŸã
ã¢ãã¡ãŒã·ã§ã³å
šäœãå£ããã®ã§ãæã楜ããéšåãã€ãŸããã®æ§ç¯ã«é²ãããšãã§ããŸãã
çºèšã å
·äœçã«ã¯ããã®ã¢ãã¡ãŒã·ã§ã³ã¯ç°¡åã«åå²ã§ããŸããããéåžžã
QuickTimeã䜿çšããŠã¢ãã¡ãŒã·ã§ã³ãèšé²ãã
After EffectsãŸãã¯
Adobe Photoshopã§ã¹ããŒããŠã³ããŠè©³çްã匷調ãããšéåžžã«äŸ¿å©ã§ãã ããšãã°ããã®ææ³ã¯ããããŒãã¿ããããŠããã«ã¢ã€ã³ã³ãé衚瀺ã«ããããåŸã
ã«ã¢ã€ã³ã³ã衚瀺ãããã倿ããã®ã«åœ¹ç«ã¡ãŸããã
æé
ãŸããã¬ãã¹ã³çšã®äžé£ã®åçã
ã¢ããããŒãããŸãã ã¢ãŒã«ã€ãã«ã¯ãã¢ã€ã³ã³ããã©ã³ããããã¹ãããã¥ãŒãªã©ãã¢ãã¡ãŒã·ã§ã³ã®äœæã«å¿
èŠãªãã®ããã¹ãŠå«ãŸããŠããŸãã
Archiveãã©ã³ããã€ã³ã¹ããŒã«ããŸãã ã¹ã±ãããã¡ã€ã«ãéãåã«ãããè¡ãããšãéèŠã§ããããããªããšãæ£ãã衚瀺ãããŸããã æ¬¡ã«ã
SweetStuff.sketchãéããäœæãããã®ã確èªããŸãã

Framerã«æ»ã£ãŠãæ°ãããã¡ã€ã«
File â
NewãäœæããŸãããã æ¬¡ã¯
ã€ã³ããŒãã§ãã

ãµã€ãºã1åã®ãŸãŸã«ããŠãããäžåºŠ[
ã€ã³ããŒã ]ãã¯ãªãã¯ããŸãã 以äžã衚瀺ãããŸãã

ãã¬ãŒããŒã¯ãã¹ã±ãããã¡ã€ã«å
ã®ãã¹ãŠã®ã¬ã€ã€ãŒãžã®ãªã³ã¯ãå«ã
ã¹ã±ãã倿°ãäœæããŸããã ã¬ã€ã€ãŒããã«ã§ã¯ãããããã¹ãŠãèŠãããšãã§ããŸãã
çºèšã [
ã€ã³ããŒã ]ãã¯ãªãã¯ããåã«ãã¹ã±ãããã¡ã€ã«ãéãããŠããããšã確èªããŠãã ãããéããŠããªãå ŽåãFramerã¯ãããèªèã§ããŸããã
ãããã¿ã€ãã¯å€ãã®ããã€ã¹ã§åäœããã¯ãã§ãã ãããã£ãŠãéžæããããã€ã¹ãžã®ãªã³ã¯ãšããŠ
ããã€ã¹å€æ°ãäœæãããã®ç»é¢ãµã€ãºã«å¿
èŠãªãã¹ãŠãé
眮ããŸãã
ã¹ã±ãã倿°ã®åŸã«æ¬¡ã远å ããŸãã
device = Framer.Device.screen
䜿ããããããããã«ãè²ã®å®æ°ã远å ããŸãã
blue = "rgb(97,213,242)" green = "rgb(150,229,144)" yellow = "rgb(226,203,98)" red = "rgb(231,138,138)"
次ã«ãã³ã³ããã¬ã€ã€ãŒãäœæããŠãä»ã®ãã¹ãŠãä¿åããŸãã
container = new Layer width: device.width height: device.height backgroundColor: 'rgba(255, 255, 255 1)' borderRadius: 5 clip: true
ããã§ã
ã³ã³ããã¬ã€ã€ãŒãäœæããããã€ã¹ã®ç»é¢ãµã€ãºãšåããµã€ãºãèšå®ããŸãã æ¬¡ã«
backgroundColorãçœã«èšå®ã
ãŸã -ããããã¥ãŒã®èæ¯ã«ãªããŸãã ä»ã®ãã¹ãŠã®ã¬ã€ã€ãŒã¯ãã®ã¬ã€ã€ãŒã«è¿œå ãããŸãã
clipã
trueã«èšå®ããããšã«ãããã³ã³ããã®å€åŽã«ã¯äœã衚瀺ãããªãããšã瀺ããŸãã
éžæè§£é€ç¶æ
éžæè§£é€ãããç»é¢ãã€ã³ã¹ããŒã«ããããšããå§ããŸãããã
ã¡ãã¥ãŒã®ã¬ã€ã€ãŒã åã¬ã€ã€ãŒã®å¹
ãšé«ããç¥ã£ãŠããã®ã§ããããã宿°ãšããŠå®çŸ©ããŸãã
menuHeight = container.height/4 menuWidth = container.width
以äžã®ã³ãŒãã远å ããŠãäœãèµ·ããããèŠãŠãã ããã
cookieMenu = new Layer height: menuHeight width: menuWidth x: 0 y: 0 backgroundColor: blue
ããã§ãCookieã¡ãã¥ãŒã®æ°ããã¬ã€ã€ãŒãäœæããéãèæ¯ãxãy座æšãããã³å¹
ã§é«ããèšå®ããŸãã
ã¡ãã¥ãŒã®æ®ãã®éšåã§åãããšãããå¿
èŠããããŸãããèŠããŠãããŠãã ãã-y座æšã¯åã®ã¬ã€ã€ãŒã®çµããããå§ãŸããŸãïŒ
yïŒprevousMenu.y + previousMenu.height ã
cupcakeMenu = new Layer height: menuHeight width: menuWidth x: 0 y: cookieMenu.y + cookieMenu.height backgroundColor: green fruitMenu = new Layer height: menuHeight width: menuWidth x: 0 y: cupcakeMenu.y + cupcakeMenu.height backgroundColor: yellow iceCreamMenu = new Layer height: menuHeight width: menuWidth x: 0 y: fruitMenu.y + fruitMenu.height backgroundColor: red
次ã«ã圱ã远å ããŠãåã¡ãã¥ãŒãä»ã®ã¡ãã¥ãŒã®äžçªäžããå§ãŸããããªé¯èŠãäœæããŸãã
åã¬ã€ã€ãŒã®èª¬æã®æåŸã«ã次ã远å ããŸãã
shadowY: 2 shadowBlur: 40 shadowSpread: 3 shadowColor: "rgba(25,25,25,0.3)"
ãã£ãïŒ ãããã忢ããŠãã ãããããã¯ãã®ããã«è¡šç€ºãããŸããã ããã¯ã
iceCreamMenuãäžéšã«ããããã®éã§ã¯ãªããã¬ã€ã€ãŒãäžããäžã«
é ã«è¿œå ãããããã§ãã
ã¡ãã¥ãŒã®äœçœ®ã倿Žããæ£ããé åºã§è¡šç€ºãã颿°ãäœæããŸãã Framerã®é¢æ°å®çŸ©ã®ã·ã°ããã£ã¯æ¬¡ã®ãšããã§ãã
functionName = ([params]) ->
ã¬ã€ã€ãŒãå®çŸ©ããåŸã«ã¡ãã¥ãŒãåé
眮ããã«ã¯ã次ã®é¢æ°ã远å ããŸãã
repositionMenus = () -> iceCreamMenu.bringToFront() fruitMenu.bringToFront() cupcakeMenu.bringToFront() cookieMenu.bringToFront() repositionMenus()
repositionMenus颿°
ã¯åŒæ°ã
åãããã¡ãã¥ãŒã¬ã€ã€ãŒãäžããäžã«ç§»åããŸãã æ¬¡ã¯é¢æ°åŒã³åºãã§ãã
ãããã¿ã€ãããã«ãèŠãŠãã ãã-åœ±ãæ£ããé åºã§è¡šç€ºãããããã«ãªããŸããã
ã¢ã€ã³ã³ãšããããŒã远å ãã
cookieMenuããå§ããŸãããã ãã¡ã€ã«ã®æåŸã«æ¬¡ã®ã³ãŒãè¡ã远å ããŸãã
cookieIcon = sketch.Cookie cookieIcon.superLayer = cookieMenu cookieText = sketch.CookieText cookieText.superLayer = cookieMenu
ããã§2ã€ã®å€æ°ãäœæãããŸãïŒ
cookieIconããã³
cookieText㯠ãSketchã®å¯Ÿå¿ãããªããžã§ã¯ã
-Cookieããã³
CookieTextã«ãã£ãŠåæåãããŸãã æ¬¡ã«ã
cookieMenuã¬ã€ã€ãŒã
superLayerããããã£ã«å²ãåœãŠãŸã ã
次ã®ã¿ã¹ã¯ã¯ããããã®ã¬ã€ã€ãŒãé
眮ããããšã§ãã
cookieIconã¯èŠªã¬ã€ã€ãŒïŒsuperLayerïŒã®äžå€®ã«é
眮ãã
cookieTextã¯æ°Žå¹³ã«äžå€®ã«é
眮ããå¿
èŠããããŸããã芪ã¬ã€ã€ãŒã«å¯ŸããŠ4/5ã ãåçŽã«äžã«ç§»åããŸãã
ã¢ã€ã³ã³ãäžå€®æãã«åŠæ¹ããïŒ
cookieIcon.center()
ããã¹ãã®äœçœ®ã確ç«ããã«ã¯ã次ã远å ããŸãã
cookieText.centerX() cookieText.y = cookieText.superLayer.height * 0.8
æ®ãã®ã¡ãã¥ãŒé
ç®ã«ã€ããŠãããããã¹ãŠç¹°ãè¿ããŸãã
cookieIcon = sketch.Cookie cookieIcon.superLayer = cookieMenu cookieIcon.center() cookieText = sketch.CookieText cookieText.superLayer = cookieMenu cookieText.centerX() cookieText.y = cookieText.superLayer.height * 0.8 cupcakeIcon = sketch.Cupcake cupcakeIcon.superLayer = cupcakeMenu cupcakeIcon.center() cupcakeText = sketch.CupcakeText cupcakeText.superLayer = cupcakeMenu cupcakeText.centerX() cupcakeText.y = cupcakeText.superLayer.height * 0.8 fruitIcon = sketch.Raspberry fruitIcon.superLayer = fruitMenu fruitIcon.center() fruitText = sketch.FruitText fruitText.superLayer = fruitMenu fruitText.centerX() fruitText.y = fruitText.superLayer.height * 0.8 iceCreamIcon = sketch.IceCream iceCreamIcon.superLayer = iceCreamMenu iceCreamIcon.center() iceCreamText = sketch.IceCreamText iceCreamText.superLayer = iceCreamMenu iceCreamText.centerX() iceCreamText.y = iceCreamText.superLayer.height * 0.8
ããã¯å€ããå°ãªãããéžæè§£é€ãããç¶æ
ã«äŒŒãŠããŸãã
ãªãã¡ã¯ã¿ãªã³ã°
ããããæ¯ãè¿ã£ãŠã¿ããšãç»é¢ã«ã³ãŒããå€ãããããšãããããŸãã
ãã¹ãŠã®ç¶æ
ãè©³çŽ°ã«æžãçããå¿
èŠããããšãã«ãã³ãŒããã©ãã ã倧ãããªãããèããŠãã ããã
åã¡ãã¥ãŒé
ç®ã«åå¥ã®ã¬ã€ã€ãŒãã¢ã€ã³ã³ãããã¹ããäœæãã代ããã«ãèªã¿ããããšæ£ç¢ºããç°¡çŽ åãã颿°ãäœæããŸãã
menuHeightãš
menuWidthãå®çŸ©ããåŸã«
èšè¿°ãã
ãã¹ãŠããæ¬¡ã®ãã®ã«çœ®ãæããŸãã
ãã®ã³ãŒãã®æ©èœïŒ
- ã¡ãã¥ãŒé
ç®ãè²ãã¢ã€ã³ã³ãããããŒãä¿åããé
åã宣èšããŸãã
- ãã®é¢æ°ã¯ãã¡ãã¥ãŒé
ç®ã®åã¬ã€ã€ãŒã«ã¢ã€ã³ã³ã远å ããŸãã
- èŠåºãã ãã§ãåãã§ãã
- ããã§ã¯ãåã¡ãã¥ãŒé
ç®ã®ã«ãŒããå®è¡ããŠãæ°ããã¬ã€ã€ãŒãäœæãã颿°ãåŒã³åºããŠã¢ã€ã³ã³ãšããããŒã远å ããŸãã ãããã®ã¬ã€ã€ãŒã¯ãåŸã§ãããã«ãã°ããã¢ã¯ã»ã¹ã§ããããã«ã menuItemsé
åã«æ ŒçŽãããããšã«æ³šæããŠãã ããã
ãããŠã玳士dies女ã¯çŽç²ãªã³ãŒãã§ãã ã©ãã
éžæç¶æ
ãžã®ç§»è¡
æåã®ã¹ãããã¯ã
menuItemsã䜿çšããŠã¡ã€ã³ã«ãŒãã«
collapseãšããæ°ããç¶æ
ã远å ããããšã§ãã èããŠã¿ãŠãã ããã
æãç³ã¿ç¶æ
ã«ãªã£ããšããå
menuItemã§äœãããå¿
èŠããããŸããïŒ
å±éç¶æ
ãã
æãããã¿ç¶æ
ã«ç§»è¡ããå¿
èŠããããŸã
ä»åŸã®å€æŽã®æŠèŠïŒ
- ã¬ã€ã€ãŒã®y座æšã¯0ã«ãªããŸãã
- é«ãã¯ç»é¢ã®1/4ããç»é¢ã®1/9ã«æžå°ããŸãã
- ã¢ã€ã³ã³ãåŸã
ã«æ¶ããŸãã
- ããã¹ãã®y座æšã倿Žãããäžã«ç§»åããŸãã
- éžæããmenuItemã®åœ±ã®ã¿ã衚瀺ãããŸã ã
æå§ãã«ãåçŽãªããšã«æ³šç®ããŠãã ããïŒ
menuItemã®é«ããšy座æšã
forã«ãŒãã®2è¡ãã³ã¡ã³ãã¢ãŠãããŸãããåé€ããªãã§ãã ãã-åŸã§å¿
èŠã«ãªããŸãã
çºèšã è¡ãã³ã¡ã³ãã¢ãŠãããã«ã¯ã
Command +
/ãæŒããŸãã
collapsedMenuHeight宿°ãã
ã³ã³ããã¬ã€ã€ãŒã®åŸã®æ®ãã®å®æ°ã«è¿œå ããŸãã
collapsedMenuHeight = container.height/9
menuItems.pushïŒmenuItemïŒã®åã«æãããã¿ç¶æ
ã远å ããŸãã
menuItem.states.add collapse: height: collapsedMenuHeight y : 0
次ã«ã
menuItemsãclickã€ãã³ãã«å¿çãããå¿
èŠããããŸãã ã«ãŒãã®çŽåŸã
repositionMenusã®åã«ãå
menuItemã®ã€ãã³ããã¢ããŠã³ã¹ããŸãã
menuItemãã¯ãªãã¯ãããã³ã«ãã«ãŒãã¯
menuItemsã®ãã¹ãŠã®èŠçŽ ãééããåèŠçŽ ãæ¬¡ã®ç¶æ
ã«ããŸãã
This.bringToFrontïŒïŒã¯ãéžæãã
menuItemãæ®ãã®ã¬ã€ã€ãŒã®äžã«å
¬éããŸãã åŸã®ã€ãã³ãã¯ç°¡åã«å€æŽã§ããŸããäºãã«å¥ã
ã«çºè¡šããããã§ãã
çºèšã thisããŒã¯ãŒãã¯ãååãçŽæ¥äœ¿çšãã代ããã«ãçŸåšåŠçäžã®ãªããžã§ã¯ããåç
§ããå¿
èŠãããå Žåã«åœ¹ç«ã¡ãŸãã ããã¯ããã¯ãªãŒã³ã§ãã»ãšãã©ã®å Žåçããã³ãŒãã®å¯èªæ§ãåäžãããŸãã
ã¯ãªãã¯ã®ä»çµã¿ã確èªããŠãã ããã
æåŸã®ä»äžã
ã¢ã€ã³ã³ãšããããŒãè¿ããããã€ãã®åé¡ãä¿®æ£ããŸãã ãããè¡ãã«ã¯ã
menuItemãéžæããããšãã远跡ããå¿
èŠããããŸãã ã«ãŒãã®åŸã
onTapã€ãã³ãã®åã«å€æ°ã远å ããŸãã
selected = false
æåã«äœãéžæãããŠããªãããã
selectedã
falseã«åæåã
ãŸã ã
ããã§ãéžæç¶æ
ãšéžæè§£é€ç¶æ
ãåãæ¿ãã颿°ãäœæã§ããŸãã
repositionMenus颿°ã®åã«ã次ã远å ããŸãã
- currentItemãã©ã¡ãŒã¿ãŒïŒæŒãããmenuItemã¡ãã¥ãŒé
ç®ïŒãåããŸã ã
- ãã¹ãŠã®menuItemãééããåã¢ã€ãã ãæ¬¡ã®ç¶æ
ã«ããŸãã
- menuItemãéžæãããŠããªãå Žåã selectedã¯falseãªã®ã§ã currentItemãåæ¹ã«èšå®ããŸãã
- menuItemãéžæãããå Žåã selectedã¯trueã§ããããã repositionMenusïŒïŒé¢æ°ã䜿çšããŠã¡ãã¥ãŒãå
ã®ç¶æ
ã«æ»ãå¿
èŠããããŸãã
- æåŸã«ãçŸåšã®å€ãšå察ã®å€ãå²ãåœãŠãŸãã
ããã§ã
onTapã®å®è£
ã§ãã®é¢æ°ã䜿çšã§ããŸãã åã¡ãã¥ãŒé
ç®ã«ã€ããŠã
onTapã倿Žã
ãŸã ã
menuItems[0].onTap -> menuStateChange(this)
ãã£ãããã ããŠãæ³šææ·±ãèŠããšãã¡ãã¥ãŒé
ç®ãå§çž®ããããšã圱ãäœãšãªã倪ãèŠããŸãã ããã¯ãã¬ã€ã€ãŒã®4ã€ã®åœ±ãã¹ãŠãäºãã«éãªãåã£ãŠããããã§ãã
ä¿®æ£ããã«ã¯ã
menuStateChangeã§ã«ãŒãã倿ŽããŸãã
for menuItem in menuItems if menuItem isnt currentItem menuItem.shadowY = 0 menuItem.shadowSpread = 0 menuItem.shadowBlur = 0 menuItem.states.next()
ã¬ã€ã€ãŒãéžæãããŠããªãå Žåãã¬ã€ã€ãŒãå§çž®ããããšåœ±ã¯åé€ãããŸãã ä»ã§ããã¢ãã¡ãŒã·ã§ã³ã¯ããªãã¯ãŒã«ã«èŠããŸãããã¢ã€ã³ã³ãšã¿ã€ãã«ã®2ã€ãæ¬ èœããŠããŸãã
menuItemsã«ãŒãã§ãããã®2è¡ã®ã³ã¡ã³ããè§£é€ããŸãïŒã«ãŒãã®æåŸã®è¡ã§ããããšã確èªããŠãã ããïŒã
addIcon(i, menuItem) addTitle(i, menuItem)
addIconããã³
addTitleã§åã¬ã€ã€ãŒã«ååã远å ããããšãèŠããŠããŸããïŒ ããã§äŸ¿å©ã«ãªããŸãã ãããã®ååã¯ã
menuItemã®ã¬ã€ã€ãŒãåºå¥ããã®ã«åœ¹ç«ã¡ãŸãã
menuStateChangeïŒïŒã®åŸã«ãã¡ãã¥ãŒãå§çž®ããããã«æ¬¡ã®è¡ã远å ããŸãã
collapse = (currentItem) ->
ã³ãŒããèŠãŠãããŸãããã
- ãã¹ãŠã®menuItemsèŠçŽ ãç¹°ãè¿ãåŠçããŸãã
- menuItemããšã«ããã®åã¬ã€ã€ãŒïŒ subLayers ïŒãå埩åŠçããŸãã
- ã¢ã€ã³ã³ã¬ã€ã€ãŒããã£ãããããå Žåã0.3ç§ã®éãã¹ã±ãŒã«= 0ãäžéæåºŠ= 0ã«ã¢ãã¡ãŒãããŸãã
- ã¿ã€ãã«ã¬ã€ã€ãŒãææãããå ŽåãY座æšãçŸåšã®ã¡ãã¥ãŒé
ç®ã®äžå¿ã«ã¢ãã¡ãŒã·ã§ã³åããŸãã
åã®é¢æ°ã远å ãããçŽåŸã«ãå¥ã®é¢æ°ã远å ããŸãã
expand = () ->
- menuItemsèŠçŽ ãç¹°ãè¿ãåŠçããŸãã
- åmenuItemã®åã¬ã€ã€ãŒãå埩åŠçããŸãã
- åã¬ã€ã€ãŒãiconã®å Žåã0.3ç§ä»¥å
ã«æå€§100ïŒ
ãäžéæåºŠ-æå€§1ã®ã¹ã±ãŒã«ã§ã¢ãã¡ãŒã·ã§ã³åããŸã ã
- åã¬ã€ã€ãŒãã¿ã€ãã«ã®å ŽåãY座æšãmenuHeight * 0.8ã«ã¢ãã¡ãŒã·ã§ã³åããŸãã
åŒã³åºãã远å ããŠã
collapseïŒïŒããã³
expandïŒïŒã
menuStateChangeïŒïŒã«è¿œå ããŸãã
menuStateChange = (currentItem) ->
ãããã¿ã€ãããã«ã確èªããŠãã ãã-ã¢ã€ã³ã³ãšã¿ã€ãã«ã®ã¢ãã¡ãŒã·ã§ã³åã¯æ£åžžã«æ©èœããŸãã
ã»ãŒå®äºã§ãã å°ãå·ŠïŒ ïŒ]
ã¢ãã¡ãŒã·ã§ã³èšå®
Framerã§ã¯ãä»»æã®ã¬ã€ã€ãŒãã¢ãã¡ãŒã·ã§ã³åã§ããŸãã ã¢ãã¡ãŒã·ã§ã³èšå®ã¯ã次ã®ãã©ã¡ãŒã¿ãŒã«ãã£ãŠæ±ºå®ãããŸãã
- ããããã£ïŒå¹
ãé«ããã¹ã±ãŒã«ãborderRadiusãªã©ãããããå¹
ãé«ããã¹ã±ãŒã«ãå¢çç·ã®ååŸã ã¬ã€ã€ãŒã¯ãä»»æã®ç¶æ
ãããããã§æ§æããç¶æ
ã«å€æãããŸãã
- æéïŒã¢ãã¡ãŒã·ã§ã³ã®æç¶æéã
- repeatïŒã¢ãã¡ãŒã·ã§ã³ãç¹°ãè¿ãåæ°ã
- é
å»¶ïŒã¢ãã¡ãŒã·ã§ã³ã®åã«äžæåæ¢ãå¿
èŠãã©ãããããã³ãããã©ãã ãç¶ããã
- æ²ç·ïŒã¢ãã¡ãŒã·ã§ã³é床ã
- ã«ãŒããªãã·ã§ã³ïŒã¢ãã¡ãŒã·ã§ã³ã«ãŒãã®é床ã埮調æŽããŸã ã
æ²ç·ãš
æ²ç·ã®ãªãã·ã§ã³ã¯ããªããããã«ããã§ããã ãããã䜿çšããŠã
Framer.jsã¢ãã¡ãŒã·ã§ã³ãã¬ã€ã°ã©ãŠã³ããªãã·ã§ã³ã䜿çšããŠãã¢ãã¡ãŒã·ã§ã³ã«ãŒãã®ãããã¿ã€ããäœæã§ããŸã
ããããã¿ã€ãã®ã¢ãã¡ãŒã·ã§ã³ã«ãŒããå®çŸ©ããªãã£ããããFramerã¯ããã©ã«ãã§
ã€ãŒãžãŒã«ãŒãã䜿çšããŸãã
ã¿ãã§äžèªç¶ã«èŠããŸãã
ã¹ããªã³ã°ã«ãŒãã®æ¹ãé©ããŠããŸããããã«ãããç§»è¡ã¹ãããã§çºçãããã¹ãŠãããé©åã«å¶åŸ¡ã§ããŸãã
次ã«ãäžèšã®ãã¹ãŠã
curveOptionsèšå®ã®æ°å€ã«
倿ããŸãã
ã¹ããªã³ã°ã«ãŒãïŒã¹ããªã³ã°ïŒã«ã¯æ¬¡ã®ãã©ã¡ãŒã¿ãå¿
èŠã§ãã
- ç·åŒµ ã ãããããææãã¯äœã§ã§ããŠããã®ã§ããããã æ°å€ã倧ããã»ã©ãé床ãšãªããŠã³ãã倧ãããªããŸãã
- æ©æŠ æµæå€ã æ°å€ã倧ããã»ã©ãã¢ãã¡ãŒã·ã§ã³ã¯éããã§ãŒãããŸãã
- é床 åæã¢ãã¡ãŒã·ã§ã³é床ã
ãããã®æ°åãããããªããŠããéãã§ã¿ãŠãã ããã ãããã¿ã€ãã§ã¯ãé床ãç°ãªã2ã€ã®ã¢ãã¡ãŒã·ã§ã³ãèŠãããšæããŸãã
ã¡ãã¥ãŒã¢ãã¡ãŒã·ã§ã³ïŒãã£ãããšéå§ãã倧å¹
ã«å éããåçã«æžéããŸãã
ã¢ã€ã³ã³ãšã¿ã€ãã«ã®ã¢ãã¡ãŒã·ã§ã³ïŒã¢ã€ã³ã³ã®ãµã€ãºã100ïŒ
ãã0ïŒ
ã«å€åããã¢ãã¡ãŒã·ã§ã³ãçªç¶çºçããŸãã ããã«éå§ããŸãããçªç¶ãã§ãŒãããŸãã åã®ã¢ãã¡ãŒã·ã§ã³ãšæ¯èŒããŠããã®ã¢ãã¡ãŒã·ã§ã³ã¯ç·åŒµãå°ãªããç°ãªãé床éã®é·ç§»ãé«éã§ãã
menuItems.pushïŒmenuItemïŒã®åã«ã次ã远å ããŸãã
menuItem.states.animationOptions = curve: "spring" curveOptions: tension: 200 friction: 25 velocity: 8 time: 0.25
ããã§ã¯ãã¡ãã¥ãŒé
ç®ã«ã¹ããªã³ã°ã¢ãã¡ãŒã·ã§ã³ãå²ãåœãŠã
匵å = 200ã
æ©æŠ = 25ã
é床 = 8ã«èšå®ããŸããã¢ãã¡ãŒã·ã§ã³ã¯ãã¢ã€ã³ã³ãããããŒãããéãç§»åããŸãã
ãã¹ãŠã®
sublayer.animateãèŠã€ãã
ããããã£ã»ã¯ã·ã§ã³ã®
ã¿ã€ã ã©ã€ã³ã®åŸã«æ¬¡ã远å ããŸãã
curve: "spring" curveOptions: tension: 120 friction: 18 velocity: 5
ããããŒãšã¢ã€ã³ã³ã®åãæ¥ã®ã¢ãã¡ãŒã·ã§ã³ãããã«è¿œå ãããŸãã
ãã®ã³ãŒãã
4å远å ããŸããã¢ã€ã³ã³ãšèŠåºãã«å¯ŸããŠã
æãããã¿ã§2åã
å±éã§2åã§ãã çµæãæ¯èŒããã«ã¯-ãµã³ãã«é¢æ°ïŒ
collapse = (currentItem) -> for menuItem in menuItems for sublayer in menuItem.subLayers if sublayer.name is "icon" sublayer.animate properties: scale: 0 opacity: 0 time: 0.3 curve: "spring" curveOptions: tension: 120 friction: 18 velocity: 5 if sublayer.name is "title" sublayer.animate properties: y: collapsedMenuHeight/2 time: 0.3 curve: "spring" curveOptions: tension: 120 friction: 18 velocity: 5
æçµçã«ã¯æ¬¡ã®ããã«ãªããŸããæ¬¡ã¯ã©ãã«è¡ããŸããïŒ
ãã¹ãŠãããŸããããŸããïŒ
æåã®Framerãããã¿ã€ãããã§ãšãããããŸãããããžã§ã¯ãã¯ãã¡ãããããŠã³ããŒãã§ããŸãã圌ã¯ãã®ã¬ãã¹ã³ãããå°ãé²ãã§ãåã¡ãã¥ãŒé
ç®ã«ãã¥ãŒã衚瀺ããæ¹æ³ã瀺ããŠããŸããåããããã¿ã€ããšãšãã«ãå®å
šãªãããžã§ã¯ããXcode + Swiftã§äœæãããŸããã- 1. å
¬åŒããã¥ã¡ã³ããšãã®ã¬ãã¹ã³ã§ Framerã®è©³çްãåŠã¶ããšãã§ããŸãã
- Framerã®ã¬ã€ã€ãŒã¯ããã³ãã¹ã¯ã€ãããã³ããžã§ã¹ãã£ãªã©ãä»ã®å€ãã®ã€ãã³ãã«ãå¿çã§ããŸãããã®ãããªã€ãã³ãã®è©³çްã«ã€ããŠã¯ããã¡ããã芧ãã ããã
- æ¡ä»¶ã§äœãã§ãããã
- ã¢ãã¡ãŒã·ã§ã³ã»ã¯ã·ã§ã³ã®Framerã®ã€ãŒãžã³ã°ã«ãŒãã§æ²ç·ã«ã€ããŠèªãããšãã§ããŸãã
- animation curves Framer .
- .
- , Swift Xcode iOS Animations by Tutorials .