根据文档,永远重复CABasicAnimation的方法是将其repeatCount
设置为HUGE_VALF
。如何在Swift中永远重复动画(HUGE_VALF)?
但是在Swift中,HUGE_VALF
会导致编译错误。 Swift似乎不了解标准库(或者这个常量所在的位置)。
现在我该怎么办?
根据文档,永远重复CABasicAnimation的方法是将其repeatCount
设置为HUGE_VALF
。如何在Swift中永远重复动画(HUGE_VALF)?
但是在Swift中,HUGE_VALF
会导致编译错误。 Swift似乎不了解标准库(或者这个常量所在的位置)。
现在我该怎么办?
将repeatCount
设置为Float.infinity
。这编译和工作。
无论如何,在所有情况下,HUGE_VALF
都是传统值。
尽管如此,这些数字常数名称并没有被Swift看到,这有些令人惊讶。我曾尝试在桥接报头中导入<stdlib.h>
,但它没有帮助。
但是请马上看到Martin R的回答。自从我发布我的答案之后,Apple就明确表达了他们的首选答案:使用.greatestFiniteMagnitude
。它几乎与.infinity
一样,但不完全相同!
我使用“巨大”值。它是一个build_in readonly var;
为CAMediaTiming
状态的repeatCount
属性的当前文档:
这个属性设置为
greatestFiniteMagnitude
会导致动画永远重复。
这编译没有问题:
let ba = CABasicAnimation()
ba.repeatCount = .greatestFiniteMagnitude
是HUGE_VALF
不导入到斯威夫特的原因是 它被定义为在<math.h>
一个“不平凡”的宏:
# define HUGE_VALF __builtin_huge_valf()
不错的发现。我相信你在这两个问答中都指'repeatCount'? –
我不是这个意思,因为我的代码实际上是在将'repeatDuration'设置为'HUGE_VALF'。但我可能应该这样做!我会调整。 – matt
'HUGE_VALF'在''中定义。但即使是这个文件被添加到桥接头文件,*这个常量不会暴露给Swift。 –