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

标签 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 的非线性计时函数来实现非线性拖动效果。谢谢。

最佳答案

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

关于ios - 在 CAMediaTimingFunction 的特定时间获取百分比?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418579/

相关文章:

iphone - 设置控件后面的 iOS 白色背景

multithreading - CoreAnimation 警告删除了未提交 CATransaction 的线程

ios - UITableView 页脚未正确定位

ios - UIPopoverController:在 popover 仍然可见时达到 dealloc

ios - 选择器未触发委托(delegate)方法

ios - 我可以创建一个在 NSMutableSet 中使用的自定义对象吗?

ios - 从一个 View Controller 传递字符串并将其显示在 ios 的 UITextView 中

ios - UICollectionView 单元格高度/可滚动内容表现奇怪/不正确

ios - 为什么我的 CAShapeLayer 没有动画? (iOS swift )

ios - CoreAnimation 旋转一个对象并同时改变它的位置