OGeek|极客世界-中国程序员成长平台

标题: ios - CAKeyframeAnimation 中的关键帧是否总是准确命中? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 07:43
标题: ios - CAKeyframeAnimation 中的关键帧是否总是准确命中?

谁能告诉我,CAKeyframeAnimation 中的关键帧是否始终保证在动画运行时被准确地击中?或者......它们仅充当插值指南吗?例如例如,如果我在路径上指定 3 个点让某个任意属性跟随——让我们称之为“位置”——我指定执行时间为 0.3f 秒,而(显然)点 1 和 3 必须被击中(因为它们是终点)我可以保证点 2 将完全按照关键帧数组中的指定进行评估吗?令人惊讶的是,我还没有找到一个能够给出充分答案的文件。我问这个是因为我正在编写一个 OpenAL 音效同步器,它使用关键帧动画的路径来触发沿其长度的各种短声音,虽然它们中的大多数都被执行,但时不时地有一些不这样做,我不知道如果这是我的逻辑错误或我的代码。 提前致谢。



Best Answer-推荐答案


一般来说,依赖作为计算结果的浮点值的“精确性”是充满危险的。比如下面的代码:

CGFloat x1 = some_function();
CGFloat x2 = some_other_function();
if(x1 == x2)
{
    // do something
}

甚至不知道函数做了什么很可能是不正确的。即使函数执行非常相似的计算,优化器也可能重新排序操作,导致小的舍入误差足以导致相等测试失败。

应该是:

CGFloat x1 = some_function();
CGFloat x2 = some_other_function();
CGFloat tolerance = 0.1; // or some tolerance suitable for the calculation.
if(fabsf(x1 - x2) < tolerance)
{
    // do something
}

其中容差是适合正在执行的计算的某个值。

因此,在不了解 CAKeyframeAnimation 的内部结构的情况下,我可以告诉您,任何期望精确值的代码本质上都是“脆弱的”。这并不是说您可能无法获得准确的值,但这在很大程度上取决于输入数据。

我希望这会有所帮助。

关于ios - CAKeyframeAnimation 中的关键帧是否总是准确命中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6076829/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4