iOSで(QuadCurve)CALayer
に沿って非常にうまくアニメーション化しています。しかし、Appleが提供するいくつかのイージング関数 (EaseIn/EaseOut など)CGPath
よりも興味深いイージング関数を使用したいと考えています。たとえば、跳ね返りや弾性関数です。
MediaTimingFunction (ベジエ) を使用すると、次のことが可能です。
しかし、もっと複雑なタイミング関数を作成したいと考えています。問題は、メディア タイミングがこれらの効果を作成するのに十分強力ではない 3 次ベジエを必要とするように見えることです。
(出典: sparrow-framework.org )
上記を作成するためのコードは、他のフレームワークでは十分に単純であるため、これは非常にイライラさせられます。曲線は入力時間を出力時間 (Tt 曲線) にマッピングしており、時間-位置曲線ではないことに注意してください。たとえば、easyOutBounce(T) = tは新しいtを返します。次に、そのtを使用して動き (またはアニメーション化する必要のあるプロパティ) をプロットします。
それで、複雑なカスタムを作成したいのCAMediaTimingFunction
ですが、それを行う方法がわからない、または可能かどうかさえわかりません。代替手段はありますか?
編集:
手順の具体例を次に示します。非常に教育的:)
ポイントaからbまでの線に沿ってオブジェクトをアニメートしたいのですが、上記のeasyOutBounce曲線を使用して線に沿ってその動きを「バウンス」させたいです。これは、 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 つの線分を作成して結合することにより、ライン バウンスを行うことができますが、それは必要ではありません。結局のところ、時間値を位置にマッピングする単純な線形関数にすぎません。)
ここで意味を成していることを願っています。