how to repeat animation forever in Swift (HUGE_VALF)?
Solution 1
Set the repeatCount
to Float.infinity
. This compiles and works.
In all probability, HUGE_VALF
was a legacy value in any case.
Still, it's a bit of a surprise that these numeric constant names are not seen by Swift. I did try importing <stdlib.h>
in the bridging header but it didn't help.
But please see now Martin R's answer. Since the time when I posted my answer, Apple has stated their preferred answer explicitly: use .greatestFiniteMagnitude
. It is almost the same thing as .infinity
but not quite!
Solution 2
The current documentation for the repeatCount
property of CAMediaTiming
states:
Setting this property to
greatestFiniteMagnitude
will cause the animation to repeat forever.
And that compiles without problems:
let ba = CABasicAnimation()
ba.repeatCount = .greatestFiniteMagnitude
The reason that HUGE_VALF
is not imported into Swift is that
it is defined as a "non-trivial" macro in <math.h>
:
# define HUGE_VALF __builtin_huge_valf()
matt
Author most recently of iOS 15 Programming Fundamentals with Swift and of Programming iOS 14. Code examples from the books available at my github repository. A much earlier edition, Programming iOS 6, is available to read for free at http://www.apeth.com/iOSBook/. And the Swift language chapters of iOS 10 Programming Fundamentals With Swift are available at http://www.apeth.com/swiftBook/.
Updated on June 02, 2022Comments
-
matt almost 2 years
According to the docs, the way to repeat a CABasicAnimation forever is to set its
repeatCount
toHUGE_VALF
.But in Swift,
HUGE_VALF
causes a compile error. Swift doesn't seem to know about the standard library (or wherever this constant resides).What do I do now?
-
Mick MacCallum almost 10 yearsGood find. I believe you meant
repeatCount
in both Q&A though? -
matt almost 10 yearsI didn't mean that, in the sense that my code was in fact setting
repeatDuration
toHUGE_VALF
. But I probably should have meant that! I'll adjust. -
Martin R almost 10 years
HUGE_VALF
is defined in<math.h>
. But even it that file is added to the bridging header file, this constant is not exposed to Swift. -
matt almost 10 years@MartinR And why is that? That's what I don't understand. It's just lucky I found another approach...