swift cabasicanimation

cómo repetir la animación para siempre en Swift(HUGE_VALF)?



cabasicanimation (3)

De acuerdo con los documentos, la forma de repetir una CABasicAnimation para siempre es establecer su repeatCount en HUGE_VALF .

Pero en Swift, HUGE_VALF causa un error de compilación. Swift no parece saber acerca de la biblioteca estándar (o donde reside esta constante).

¿Qué hago ahora?


Establezca repeatCount en Float.infinity . Esto compila y funciona.

Con toda probabilidad, HUGE_VALF era un valor heredado en cualquier caso.

Aún así, es un poco sorprendente que Swift no vea estos nombres de constantes numéricas. <stdlib.h> importar <stdlib.h> en el encabezado puente, pero no ayudó.

Pero, por favor, mira ahora la respuesta de Martin R. Desde el momento en que publiqué mi respuesta, Apple ha declarado explícitamente su respuesta preferida: use .greatestFiniteMagnitude . ¡Es casi lo mismo que .infinity pero no del todo!


La documentación actual para la propiedad CAMediaTiming de CAMediaTiming indica:

Establecer esta propiedad en greatestFiniteMagnitude hará que la animación se repita para siempre.

Y eso compila sin problemas:

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

La razón por la que HUGE_VALF no se importa a Swift es que se define como una macro "no trivial" en <math.h> :

# define HUGE_VALF __builtin_huge_valf()


Utilizo el valor "ENORME". es un build_in readonly var;