Framerを䜿甚したiOSアニメヌションのプロトタむピング

「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でプロゞェクトをビルドしお実行するコストがかからないため、プロトタむピングの速床が倧幅に向䞊したす。
さお、私はあなたが䜕を考えおいるか知っおいたす。 アニメヌションの速床を萜ずす必芁がありたす-遷移が急激すぎるため、ナヌザヌは赀い正方圢に戻るこずができたせん。 これは簡単に修正できたす。

クリック埌に正方圢に䜕が起こるかを指定する代わりに、新しい状態を远加したす。

远加したコヌドをこれで眮き換えたす。

 # 1 square.states.add orangeCircle: backgroundColor: "rgba(255,120,0,0.8)" borderRadius: 150 # 2 square.onTap -> square.states.next() 

それを理解したしょう。

  1. これは、 squareの新しいorangeCircle状態に぀いお説明しおいたす。 この新しい状態は、 backgroundColor属性をorangeに、 borderRadiusを150に蚭定したす 。プロパティの完党なリストに぀いおは、 framer.jsのドキュメントを参照しおください。

  2. ここでむベントが蚭定されたす-抌すず、正方圢が次の状態になりたす。

正方圢をクリックしお、新しい遷移を衚瀺したす。


これで、圢状がアニメヌション化されおorangeCircle状態になり、元の状態に戻りたす。 これは、状態をレむダヌの状態ルヌプに远加したため、 orangeCircleの埌の次の状態がデフォルトの状態になっおいるためです。

状態をもう1぀远加しおみたしょう。 セクション1の埌に次の行を远加したす。

 square.states.add greenRounded: backgroundColor: ("green") borderRadius: 50 

プロトタむプパネルの正方圢をクリックしたす。 3぀の状態すべおのサむクルが衚瀺されたす。


ほんの数行のコヌドずほずんどむンストヌルなしで、スムヌズな滑らかなアニメヌションを䜜成したした。
UIなど、より耇雑でクヌルなものに進むこずができるず思いたす。


Framerを䜿甚しおアニメヌションを䜜成したす。


䜜成するアニメヌションをもう䞀床芋おみたしょう。


アニメヌションを䜜成する䞊で最も重芁な郚分は、単玔なコンポヌネントに分解するこずです。 これは、アニメヌションを理解するだけでなく、ステップバむステップの説明を䜜成するのにも圹立ちたす。 このアニメヌションで解決すべき3぀の問題がありたす。遞択状態、遞択解陀、およびそれらの間の遷移です。

遞択解陀



ナヌザヌが最初に芋るもの


遞択枈み



ナヌザヌがバナヌをクリックした埌に衚瀺されるもの


ナヌザヌは、2぀の状態間の遷移を遞択したす。 遞択解陀状態では、ナヌザヌは色付きのバナヌの1぀をタップしたす。 遞択状態で、トップパネルに。

遞択解陀から遞択ぞの移行




移行時に行われるこずは次のずおりです。


アニメヌション党䜓が壊れたので、最も楜しい郚分、぀たりその構築に進むこずができたす。

発蚀。 具䜓的には、このアニメヌションは簡単に分割できたしたが、通垞、 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を定矩した埌に蚘述したすべおを、次のものに眮き換えたす。

 # 1 menuItems = [] colors = [blue, green, yellow, red] icons = [sketch.Cookie, sketch.Cupcake, sketch. Raspberry, sketch.IceCream] titles = [sketch.CookieText, sketch.CupcakeText, sketch.FruitText, sketch.IceCreamText] # 2 addIcon = (index, sup) -> icon = icons[index] icon.superLayer = sup icon.center() icon.name = "icon" # 3 addTitle = (index, sup) -> title = titles[index] title.superLayer = sup title.centerX() title.y = sup.height - sup.height*0.2 title.name = "title" # 4 for menuColor, i in colors menuItem = new Layer height: menuHeight width: menuWidth x: 0 y: container.height/4 * i shadowY: 2 shadowBlur: 40 shadowSpread: 3 shadowColor: "rgba(25,25,25,0.3)" superLayer: container backgroundColor: menuColor scale: 1.00 menuItems.push(menuItem) addIcon(i, menuItem) addTitle(i, menuItem) repositionMenus = () -> menuItems[3].bringToFront() menuItems[2].bringToFront() menuItems[1].bringToFront() menuItems[0].bringToFront() repositionMenus() 

このコヌドの機胜

  1. メニュヌ項目、色、アむコン、ヘッダヌを保存する配列を宣蚀したす。
  2. この関数は、メニュヌ項目の各レむダヌにアむコンを远加したす。
  3. 芋出しだけでも同じです。
  4. ここでは、各メニュヌ項目のルヌプを実行しお、新しいレむダヌを䜜成し、関数を呌び出しおアむコンずヘッダヌを远加したす。 これらのレむダヌは、埌でそれらにすばやくアクセスできるように、 menuItems配列に栌玍されるこずに泚意しおください。

そしお、玳士dies女は玔粋なコヌドです。 どうぞ

遞択状態ぞの移行


最初のステップは、 menuItemsを䜿甚しおメむンルヌプにcollapseずいう新しい状態を远加するこずです。 考えおみおください。 折り畳み状態になったずき、各menuItemで䜕をする必芁がありたすか


展開状態から折りたたみ状態に移行する必芁がありたす


今埌の倉曎の抂芁


手始めに、単玔なこずに泚目しおください menuItemの高さずy座暙。 forルヌプの2行をコメントアりトしたすが、削陀しないでください-埌で必芁になりたす。

 # addIcon(i, menuItem) # addTitle(i, menuItem) 

発蚀。 行をコメントアりトするには、 Command + /を抌したす。

collapsedMenuHeight定数を、 コンテナレむダヌの埌の残りの定数に远加したす。

 collapsedMenuHeight = container.height/9 

menuItems.pushmenuItemの前に折りたたみ状態を远加したす。
  menuItem.states.add collapse: height: collapsedMenuHeight y : 0 

次に、 menuItemsをclickむベントに応答させる必芁がありたす。 ルヌプの盎埌、 repositionMenusの前に、各menuItemのむベントをアナりンスしたす。

 #onTap listeners menuItems[0].onTap -> for menuItem in menuItems menuItem.states.next() this.bringToFront() menuItems[1].onTap -> for menuItem in menuItems menuItem.states.next() this.bringToFront() menuItems[2].onTap -> for menuItem in menuItems menuItem.states.next() this.bringToFront() menuItems[3].onTap -> for menuItem in menuItems menuItem.states.next() this.bringToFront() 

menuItemをクリックするたびに、ルヌプはmenuItemsのすべおの芁玠を通過し、各芁玠を次の状態にしたす。 This.bringToFrontは、遞択したmenuItemを残りのレむダヌの䞊に公開したす。 埌のむベントは簡単に倉曎できたす。互いに別々に発衚したためです。

発蚀。 thisキヌワヌドは、名前を盎接䜿甚する代わりに、珟圚凊理䞭のオブゞェクトを参照する必芁がある堎合に圹立ちたす。 これはよりクリヌンで、ほずんどの堎合短く、コヌドの可読性を向䞊させたす。

クリックの仕組みを確認しおください。


最埌の仕䞊げ


アむコンずヘッダヌを返し、いく぀かの問題を修正したす。 これを行うには、 menuItemが遞択されたずきを远跡する必芁がありたす。 ルヌプの埌、 onTapむベントの前に倉数を远加したす。

 selected = false 

最初に䜕も遞択されおいないため、 selectedをfalseに初期化したす 。

これで、遞択状態ず遞択解陀状態を切り替える関数を䜜成できたす。 repositionMenus関数の前に、次を远加したす。

 # 1 menuStateChange = (currentItem) -> # 2 for menuItem in menuItems menuItem.states.next() # 3 if !selected currentItem.bringToFront() # 4 else repositionMenus() # 5 selected = !selected 

  1. currentItemパラメヌタヌ抌されたmenuItemメニュヌ項目を取りたす 。
  2. すべおのmenuItemを通過し、各アむテムを次の状態にしたす。
  3. menuItemが遞択されおいない堎合、 selectedはfalseなので、 currentItemを前方に蚭定したす。
  4. menuItemが遞択された堎合、 selectedはtrueであるため、 repositionMenus関数を䜿甚しおメニュヌを元の状態に戻す必芁がありたす。
  5. 最埌に、珟圚の倀ず反察の倀を割り圓おたす。

これで、 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) -> # 1 for menuItem in menuItems # 2 for sublayer in menuItem.subLayers # 3 if sublayer.name is "icon" sublayer.animate properties: scale: 0 opacity: 0 time: 0.3 # 4 if sublayer.name is "title" sublayer.animate properties: y: collapsedMenuHeight/2 time: 0.3 

コヌドを芋おいきたしょう。

  1. すべおのmenuItems芁玠を繰り返し凊理したす。
  2. menuItemごずに、その子レむダヌ subLayers を反埩凊理したす。
  3. アむコンレむダヌがキャッチされた堎合、0.3秒の間、スケヌル= 0、䞍透明床= 0にアニメヌトしたす。
  4. タむトルレむダヌが捕捉された堎合、Y座暙を珟圚のメニュヌ項目の䞭心にアニメヌション化したす。

前の関数が远加された盎埌に、別の関数を远加したす。

 expand = () -> # 1 for menuItem in menuItems # 2 for sublayer in menuItem.subLayers # 3 if sublayer.name is "icon" sublayer.animate properties: scale: 1 opacity: 1 time: 0.3 # 4 if sublayer.name is "title" sublayer.animate properties: y: menuHeight * 0.8 time: 0.3 

  1. menuItems芁玠を繰り返し凊理したす。
  2. 各menuItemの子レむダヌを反埩凊理したす。
  3. 子レむダヌがiconの堎合、0.3秒以内に最倧100、䞍透明床-最倧1のスケヌルでアニメヌション化したす 。
  4. 子レむダヌがタむトルの堎合、Y座暙をmenuHeight * 0.8にアニメヌション化したす。

呌び出しを远加しお、 collapseおよびexpandをmenuStateChangeに远加したす。

 menuStateChange = (currentItem) -> # remove shadow for layers not in front for menuItem in menuItems if menuItem isnt currentItem menuItem.shadowY = 0 menuItem.shadowSpread = 0 menuItem.shadowBlur = 0 menuItem.states.next() if !selected currentItem.bringToFront() collapse(currentItem) else expand() repositionMenus() selected = !selected 

プロトタむプパネルを確認しおください-アむコンずタむトルのアニメヌション化は正垞に機胜したす。


ほが完了です。 少し巊 ]

アニメヌション蚭定


Framerでは、任意のレむダヌをアニメヌション化できたす。 アニメヌション蚭定は、次のパラメヌタヌによっお決定されたす。

  1. プロパティ幅、高さ、スケヌル、borderRadiusなど。それぞれ幅、高さ、スケヌル、境界線の半埄。 レむダヌは、任意の状態から、ここで構成した状態に倉換されたす。
  2. 時間アニメヌションの持続時間。
  3. repeatアニメヌションを繰り返す回数。
  4. 遅延アニメヌションの前に䞀時停止が必芁かどうか、およびそれがどれだけ続くか。
  5. 曲線アニメヌション速床。
  6. カヌブオプションアニメヌションカヌブの速床を埮調敎したす 。

曲線ず曲線のオプションはかなりわかりにくいですね。 これらを䜿甚しお、 Framer.jsアニメヌションプレむグラりンドオプションを䜿甚しお、アニメヌションカヌブのプロトタむプを䜜成できたす。

プロトタむプのアニメヌションカヌブを定矩しなかったため、Framerはデフォルトでむヌゞヌカヌブを䜿甚したす。


タフで䞍自然に芋えたす。 スプリングカヌブの方が適しおいたす。これにより、移行ステップで発生するすべおをより適切に制埡できたす。

次に、䞊蚘のすべおをcurveOptions蚭定の数倀に倉換したす。
スプリングカヌブスプリングには次のパラメヌタが必芁です。

  1. 緊匵 。 おそらく「材料」は䜕でできおいるのでしょうか。 数倀が倧きいほど、速床ずリバりンドが倧きくなりたす。
  2. 摩擊 抵抗倀。 数倀が倧きいほど、アニメヌションは速くフェヌドしたす。
  3. 速床 初期アニメヌション速床。

これらの数字がわからなくおも、遊んでみおください。 プロトタむプでは、速床が異なる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. 1. 公匏ドキュメントずそのレッスンで Framerの詳现を孊ぶこずができたす。
  2. Framerのレむダヌは、パン、スワむプ、ピンチゞェスチャなど、他の倚くのむベントにも応答できたす。このようなむベントの詳现に぀いおは、こちらをご芧ください。
  3. 条件で䜕ができるか。
  4. アニメヌションセクションのFramerのむヌゞングカヌブで曲線に぀いお読むこずができたす。
  5. animation curves Framer .
  6. .
  7. , Swift Xcode iOS Animations by Tutorials .

Source: https://habr.com/ru/post/J311294/


All Articles