2014-06-21 63 views
35

根据文档,永远重复CABasicAnimation的方法是将其repeatCount设置为HUGE_VALF如何在Swift中永远重复动画(HUGE_VALF)?

但是在Swift中,HUGE_VALF会导致编译错误。 Swift似乎不了解标准库(或者这个常量所在的位置)。

现在我该怎么办?

回答

79

repeatCount设置为Float.infinity。这编译和工作。

无论如何,在所有情况下,HUGE_VALF都是传统值。

尽管如此,这些数字常数名称并没有被Swift看到,这有些令人惊讶。我曾尝试在桥接报头中导入<stdlib.h>,但它没有帮助。


但是请马上看到Martin R的回答。自从我发布我的答案之后,Apple就明确表达了他们的首选答案:使用.greatestFiniteMagnitude。它几乎与.infinity一样,但不完全相同!

+2

不错的发现。我相信你在这两个问答中都指'repeatCount'? –

+1

我不是这个意思,因为我的代码实际上是在将'repeatDuration'设置为'HUGE_VALF'。但我可能应该这样做!我会调整。 – matt

+0

'HUGE_VALF'在''中定义。但即使是这个文件被添加到桥接头文件,*这个常量不会暴露给Swift。 –

0

我使用“巨大”值。它是一个build_in readonly var;

1

CAMediaTiming状态的repeatCount属性的当前文档:

这个属性设置为greatestFiniteMagnitude会导致动画永远重复。

这编译没有问题:

let ba = CABasicAnimation() 
ba.repeatCount = .greatestFiniteMagnitude 

HUGE_VALF不导入到斯威夫特的原因是 它被定义为在<math.h>一个“不平凡”的宏:

# define HUGE_VALF __builtin_huge_valf()