CAKeyframeAnimation中的关键帧是否始终完全命中?

时间:2011-05-20 19:40:06

标签: ios openal cakeyframeanimation

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

1 个答案:

答案 0 :(得分:3)

通常,依赖于计算结果的浮点值的“精确性”充满了危险。例如,以下代码:

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的内部结构的情况下,我可以告诉您,任何期望精确值的代码本质上都是“脆弱的”。这并不是说你不会得到确切的值,但这很大程度上取决于输入数据。

我希望这会有所帮助。