iOSで(QuadCurve)にCALayer
沿ってをCGPath
うまくアニメーション化しています。しかし、私はAppleが提供するいくつかよりも面白いイージング関数(EaseIn / EaseOutなど)を使用したいと思います。たとえば、バウンスや弾性関数。
これらはMediaTimingFunction(ベジェ)で実行できます。
しかし、もっと複雑なタイミング関数を作成したいと思います。問題は、メディアのタイミングには、これらの効果を作成するのに十分なほど強力ではない3次ベジェが必要であるように見えることです。
(ソース:sparrow-framework.org)
コード上記を作成するには、この非常にイライラになり、他のフレームワークでは、単純な十分、です。曲線は入力時間を出力時間(Tt曲線)にマッピングしており、時間位置曲線ではないことに注意してください。たとえば、easeOutBounce(T)= tは新しいtを返します。次に、そのtを使用して動き(またはアニメーション化する必要があるプロパティ)をプロットします。
だから、私は複雑なカスタムを作成したいのCAMediaTimingFunction
ですが、どうすればよいのか、それが可能かどうかさえわかりません。代替案はありますか?
編集:
手順の具体例を以下に示します。非常に教育的:)
オブジェクトをポイントaからbまでのラインに沿ってアニメートしたいのですが、上のeaseOutBounceカーブを使用して、ラインに沿ってオブジェクトの動きを「バウンス」させます。これは、aからbまでの正確な線をたどりますが、現在のベジェベースのCAMediaTimingFunctionを使用した場合よりも複雑な方法で加速および減速します。
その線をCGPathで指定された任意の曲線の動きにしましょう。それでもその曲線に沿って移動するはずですが、直線の例と同じように加速および減速するはずです。
理論的には、次のように機能するはずです。
移動曲線をキーフレームアニメーションmove(t)= pとして説明します。ここで、tは時間[0..1]であり、pは時間tで計算された位置です。したがって、move(0)はカーブの開始位置、move(0.5)は正確な中央、move(1)は終了位置を返します。タイミング関数time(T)= tを使用して移動のt値を提供すると、必要なものが得られます。バウンス効果の場合、タイミング関数はtime(0.8)とtime(0.8)に同じt値を返す必要があります(単なる例)。タイミング関数を置き換えるだけで、別の効果が得られます。
(はい、前後に移動する4つのラインセグメントを作成して結合することでラインバウンスを行うことは可能ですが、それは必要ありません。結局のところ、時間値を位置にマップする単純な線形関数です。)
ここで意味が通じているといいのですが。