在CAMediaTimingFunction中获取特定时间的百分比?

时间:2014-03-15 01:49:15

标签: ios objective-c core-animation

CGFloat start = 0;      // The start value of X for an animation
CGFloat distance = 100; // The distance X will have traveled when the animation completes

CAMediaTimingFunction* tf = [CAMediaTimingFunction functionWithControlPoints:0 :0 :1 :1]; // Linear easing for simplicity

CGFloat percent = [tf valueAtTime:0.4]; // Returns 0.4

CGFloat x = start + (percent * distance); // Returns 40, which is the value of X 40% through the animation

如何将方法valueAtTime:实施到CAMediaTimingFunction类别中,以便它的效果与上面的代码相同?

请注意:这是一个人为的例子。实际上,我将使用UIPanGestureRecognizer的非线性计时功能来实现非线性拖动效果。感谢。

1 个答案:

答案 0 :(得分:2)

计时函数是一个非常简单的贝塞尔曲线 - 两个端点0,01,1,每个控制点有一个控制点 - 绘制时间(x)与完成动画的百分比(y),所以你所要做的就是贝塞尔曲线数学(给定x,相应的y是什么)。谷歌为它,你会很容易找到必要的公式。我发现这是一个不错的起点:http://pomax.github.io/bezierinfo/