bli00 Asked: 2024-07-26 04:09:04 +0800 CST2024-07-26 04:09:04 +0800 CST 2024-07-26 04:09:04 +0800 CST 使用 CADisplayLink 的缓动函数 772 我需要使用 手动在 SwiftUI 中逐帧制作动画CADisplayLink,它为我提供了逐帧更新。要以线性方式将值从 制作成a动画b,实现很简单,只需计算 的变化率(b-a) / duration并将此增量应用于每帧的值即可。 但是,当动画不是线性时,我找不到有关如何进行逐帧更新的任何信息。当然,我可以使用例如数字包自己创建缓动函数,但这似乎是一种太常见的用例,需要如此多的手动实现。 Apple 的现成缓动函数在哪里?应该有一个缓动函数包,允许我y使用进行检索x,但这篇文章却说没有? 1 个回答 Voted Best Answer Craig Siemens 2024-07-26T06:23:05+08:002024-07-26T06:23:05+08:00 如果您可以使用 SwiftUI 并且最低部署版本为 iOS 17,则可以使用UnitCurve。 由二维曲线定义的函数,将范围在 [0,1] 内的输入进度映射到范围也在 [0,1] 内的输出进度。通过改变曲线的形状,可以改变动画或其他插值的有效速度。 您可以传递一个进度,即动画已经过去的百分比,然后获取一个新的进度值,用于计算动画值的当前状态。 let newProgress = UnitCurve.easeInOut.value(at: progress) let newValue = a + (b - a) * newProgress 如果您需要其他动画曲线,https://easings.net/是常用曲线的良好参考。它还在每页底部包含生成曲线的数学运算。
如果您可以使用 SwiftUI 并且最低部署版本为 iOS 17,则可以使用UnitCurve。
您可以传递一个进度,即动画已经过去的百分比,然后获取一个新的进度值,用于计算动画值的当前状态。
如果您需要其他动画曲线,https://easings.net/是常用曲线的良好参考。它还在每页底部包含生成曲线的数学运算。