web-dev-qa-db-fra.com

comment répéter l'animation pour toujours dans Swift (HUGE_VALF)?

Selon les documents, la façon de répéter une CABasicAnimation pour toujours est de définir son repeatCount sur HUGE_VALF.

Mais dans Swift, HUGE_VALF provoque une erreur de compilation. Swift ne semble pas connaître la bibliothèque standard (ou où réside cette constante)).

Qu'est-ce que je fais maintenant?

38
matt

Définissez repeatCount sur Float.infinity. Cela compile et fonctionne.

Selon toute probabilité, HUGE_VALF était une valeur héritée dans tous les cas.

Pourtant, il est un peu surprenant que ces noms de constantes numériques ne soient pas vus par Swift. J'ai essayé d'importer <stdlib.h> dans l'en-tête de pontage mais cela n'a pas aidé.


Mais voyez maintenant la réponse de Martin R. Depuis le moment où j'ai posté ma réponse, Apple a indiqué explicitement sa réponse préférée: utilisez .greatestFiniteMagnitude. C'est presque la même chose que .infinity mais pas tout à fait!

82
matt

La documentation actuelle pour la propriété repeatCount de CAMediaTiming indique:

La définition de cette propriété sur greatestFiniteMagnitude entraînera la répétition permanente de l'animation.

Et cela se compile sans problème:

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

La raison pour laquelle HUGE_VALF n'est pas importé dans Swift est qu'il est défini comme une macro "non triviale" dans <math.h>:

#   define    HUGE_VALF    __builtin_huge_valf()
2
Martin R

J'utilise la valeur "ÉNORME". c'est un build_in var en lecture seule;

0
david