模仿Apple的UIViewAnimationOptionCurveEaseInOut数学方程式?

时间:2013-05-03 05:08:26

标签: ios math animation uiviewanimation

我想创建一个看起来像Apple的CurveEaseInOut一样动画的动画,这样我的应用程序看起来就一致了。问题是这个特定的动画不能使用UIView动画方法。我必须在每一帧手动操纵位置。例如,我得到一个时间T,我需要输出该时间点的中心C.而不是使用线性关系(例如C = T),我希望它像Apple一样容易进出。

Apple使用哪种曲线方程用于该动画选项?

我假设曲线看起来与此类似:(取自this question

enter image description here

如果是这种情况,看起来我应该能够使用正确的常量调整Cubic Hermite spline等式并获得相同的结果。问题是Apple使用哪些常量?

2 个答案:

答案 0 :(得分:3)

正如碳酸(H2CO3)指出的那样,问题是苹果使用的控制点。

假设它与Core Animation中的默认计时功能相同,您可以从文档中获取控制点:

  

kCAMediaTimingFunctionDefault指定大多数动画用作默认的计时功能。它使用控制点[(0.0,0.0),(0.25,0.1),(0.25,0.1),(1.0,1.0)]来近似Bézier定时函数。通过使用此常量,您可以确保您的动画将使用当前的默认时间。


修改

由于您提到自定义动画,我非常建议您观看Animation Custom Layer Properties presentation by Rob Napier。在进行自定义动画的同时,您可以从Core Animation中受益。 (观看整个演示文稿。它有助于理解核心动画的大部分内容)

答案 1 :(得分:1)

Simon Whitaker对CAMediaTimingFunction有一个online javascript configurator

他的代码转储这些控制点:

linear        (0.00, 0.00), (0.00, 0.00), (1.00, 1.00), (1.00, 1.00)
easeIn        (0.00, 0.00), (0.42, 0.00), (1.00, 1.00), (1.00, 1.00)
easeOut       (0.00, 0.00), (0.00, 0.00), (0.58, 1.00), (1.00, 1.00)
easeInEaseOut (0.00, 0.00), (0.42, 0.00), (0.58, 1.00), (1.00, 1.00)
default       (0.00, 0.00), (0.25, 0.10), (0.25, 1.00), (1.00, 1.00)