我该如何使用CAMediaTimingFunction来映射自定义值?

3
我想使用CAMediaTimingFunction(例如kCAMediaTimingFunctionEaseIn)将输入值(0-1)映射到输出值(0-1),就像文档所说的那样。然而,这个功能似乎根本没有被公开。是否有办法让我在自己的自定义值中访问此功能?这不是在UIView、CALayer等中 - 它只是在一些自定义代码中,我想使用iOS曲线。
2个回答

1

不错的东西。阅读了Webkit源代码后,我最终做了一些非常相似的事情。但愿他们把这个放进iOS API中,这将节省很多重复的工作。 - antsyawn

1

实际上,这个功能是唯一公开的功能。CAMediaTimingFunction是一个类,它存储定义从(0.0,0.0)开始到(1.0,1.0)结束的Bézier曲线的两个控制点的坐标。这样的曲线实际上是从区间[0,1]到区间[0,1]的映射。

如果您想了解如何设置特定曲线的控制点的坐标,可以搜索贝塞尔曲线。

补充:

正如您澄清的那样,您想使用现有的CAMediaTimingFunction实例将值映射到其转换后的值(也称为计算映射)。您可以使用getControlPointAtIndex:values:从实例中检索控制点的坐标,并使用它们来计算映射。有关数学,请参见http://en.wikipedia.org/wiki/Bézier_curve


2
谢谢您的快速回答!我可能错过了一些显而易见的东西。我想要的是能够传入0到1之间的时间值,并获得在预定义曲线之一(例如kCAMediaTimingFunctionEaseIn)上移动的0到1之间的输出值的能力。我看到我可以使用“functionWithName”方法创建一个CAMediaTimingFunction实例,但是我应该使用哪个函数将我的输入值映射到输出值?我不想创建自己的曲线,我只想使用kCAMediaTimingFunctionEaseIn。 - antsyawn
@antsyawn - 你解决这个问题了吗?谢谢。 - Duck
@SpaceDog - 是的,正如我在接受的答案中评论的那样,我在webkit源代码中找到了我需要的方法。很抱歉,这是相当长时间之前的事情了,我已经没有那段代码了,但它运行得非常好。祝你好运 :) - antsyawn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接