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的非线性计时功能来实现非线性拖动效果。感谢。
答案 0 :(得分:2)
计时函数是一个非常简单的贝塞尔曲线 - 两个端点0,0
和1,1
,每个控制点有一个控制点 - 绘制时间(x)与完成动画的百分比(y),所以你所要做的就是贝塞尔曲线数学(给定x,相应的y是什么)。谷歌为它,你会很容易找到必要的公式。我发现这是一个不错的起点:http://pomax.github.io/bezierinfo/