Ios 在CamediaTiming函数中获取特定时间的百分比?

Ios 在CamediaTiming函数中获取特定时间的百分比?,ios,objective-c,core-animation,Ios,Objective C,Core Animation,如何将方法valuetime:实现到CAMediaTimingFunction的一个类别中,使其工作方式与上述代码中所述的相同 请注意:这是一个人为的例子。实际上,我将使用非线性计时函数和UIPangestureRecognitor来实现非线性拖动效果。谢谢。计时函数是一条非常简单的贝塞尔曲线-两个端点,0,0和1,1,每个端点有一个控制点-绘制时间(x)与动画完成百分比(y)的关系图,所以你所要做的就是贝塞尔曲线数学(给定x,对应的y是什么)。谷歌搜索它,你会很容易找到必要的公式。我找到了一个

如何将方法
valuetime:
实现到
CAMediaTimingFunction
的一个类别中,使其工作方式与上述代码中所述的相同


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

计时函数是一条非常简单的贝塞尔曲线-两个端点,
0,0
1,1
,每个端点有一个控制点-绘制时间(x)与动画完成百分比(y)的关系图,所以你所要做的就是贝塞尔曲线数学(给定x,对应的y是什么)。谷歌搜索它,你会很容易找到必要的公式。我找到了一个不错的起点:

您是否考虑过通过检查正在设置动画的属性的表示层的动态值来计算进度?不幸的是,这不行。当用户拖动手指时,我手动设置视图的动画。换句话说,我是自己设置值,而不是将责任交给计算机。在设置值之前,我想使用计时功能对其进行操作,因此使用
valuetime:
方法。重复我以前的注释。您可能会发现另一种更简单、更强大的方法。您可以通过操纵
CAMediaTiming
属性,以交互方式驱动核心动画,从而充分利用CA的功能。基本上,您可以将
速度
设置为零,并根据交互手势的进度更新
时间偏移量
。如果要自动完成动画,只需将“媒体计时”属性设置回“正常”。
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