4

UIViewAnimationCurveLinear を使用して 2 点間のビューをアニメーション化しているので、このアニメーションの速度がわかります。特定の状況では、UIViewAnimationCurveEaseOut を追加して、ビューを遅くして停止させたいと考えています。この効果をシームレスにするには、イーズアウト アニメーションは、その前の線形アニメーションと同じ速度で開始する必要があります。このイージングを発生させたい一定の距離が与えられた場合、この既知の開始速度を達成するために必要な時間をどのように計算できますか?

たとえば、ビューを x = 0 から x = 100 まで 10 秒間アニメーション化するとします。したがって、速度は 10 ピクセル/秒です。UIViewAnimationCurveEaseOut アニメーションを使用して、ビューを x = 100 から x = 120 に減速させたいと思います。アニメーションが 10 ピクセル/秒で開始されるようにするには、このアニメーションの長さをどのくらいにする必要がありますか?

Core Animation の CAMediaTimingFunction は、2 番目と 3 番目の制御点が曲線の形状を決定する 3 次ベジエ曲線を使用してアニメーションのペーシングを制御することを理解しています。UIViewAnimationCurve イージング関数も 3 次ベジエ曲線であると思います。これらの関数で使用されるデフォルトのコントロール ポイントを知っていれば、与えられた速度と距離から持続時間を計算する式を導き出すことができるはずですが、どこにも文書化されているこれらのデフォルトのコントロール ポイントを見つけることができませんでした。

4

2 に答える 2

1

完全な回答はできないかもしれませんが、CAMediaTimingFunction の -getControlPointAtIndex:values: メソッドを紹介することはできます。これにより、EaseOut タイミング関数を作成し、そのコントロール ポイントを調べることができます。

また、CAKeyframeAnimation を使用して作成されたカスタム加速曲線に関するMatt Gallagher の記事も紹介します。これも役立つかもしれません。

于 2010-07-13T14:04:29.237 に答える