使用 CADisplayLink 的缓动功能

问题描述 投票:0回答:1

我需要使用

CADisplayLink
在 SwiftUI 中手动逐帧制作动画,这为我提供了逐帧更新。要以线性方式将值从
a
动画化到
b
,实现很简单,只需使用
(b-a) / duration
计算变化率并将此增量应用于每一帧上的值。

但是,我没有找到任何有关当动画不是线性时如何进行帧到帧更新的信息。当然,我可以使用 numeric 包等方式自己创建缓动函数,但对于需要如此多手动实现的用例来说,这似乎太常见了。

Apple 开箱即用的缓动功能在哪里?应该有一个缓动函数包,允许我使用

y
检索
x
,但这篇 post 表明没有?

ios swift swiftui uikit
1个回答
0
投票

如果您可以使用 SwiftUI 并且最低部署版本为 iOS 17,则可以使用 UnitCurve

由二维曲线定义的函数,将 [0,1] 范围内的输入进度映射到也在 [0,1] 范围内的输出进度。通过改变曲线的形状,可以改变动画或其他插值的有效速度。

您可以传入一个进度,即已播放动画的百分比,然后获取一个新的进度值,以在计算动画值的当前状态时使用。

let newProgress = UnitCurve.easeInOut.value(at: progress)
let newValue = a + (b - a) * newProgress

如果您需要一些其他动画曲线,https://easings.net/是常用曲线的一个很好的参考。它还包括在每页底部生成曲线的数学。

© www.soinside.com 2019 - 2024. All rights reserved.