2014-06-21 8 views
35

Zgodnie z dokumentami, sposób powtarzania CABasicAnimation na zawsze polega na ustawieniu jego repeatCount na HUGE_VALF.jak powtórzyć animację na zawsze w Swift (HUGE_VALF)?

Ale w Swift, HUGE_VALF powoduje błąd kompilacji. Swift wydaje się nie wiedzieć o standardowej bibliotece (lub gdziekolwiek ta stała rezyduje).

Co mam teraz zrobić?

Odpowiedz

79

Ustaw repeatCount na Float.infinity. To się kompiluje i działa.

Według wszelkiego prawdopodobieństwa, HUGE_VALF była w każdym przypadku wartością starszą.

Mimo to, jest to trochę zaskakujące, że te numeryczne stałe nazwy nie są widoczne w Swift. Spróbowałem zaimportować <stdlib.h> w nagłówku mostu, ale to nie pomogło.


Ale proszę zobacz teraz odpowiedź Martina R. Od czasu, kiedy opublikowałem swoją odpowiedź, Apple wyraźnie określiło preferowaną odpowiedź: użyj .greatestFiniteMagnitude. To prawie to samo co .infinity, ale nie do końca!

+2

Dobre znalezisko. Sądzę, że miałeś na myśli 'repeatCount' zarówno w pytaniach i odpowiedziach? –

+1

Nie miałem na myśli tego, w tym sensie, że mój kod był w rzeczywistości ustawieniem 'repeatDuration' na' HUGE_VALF'. Ale pewnie powinienem to zrobić! Dostosuję. – matt

+0

'HUGE_VALF' jest zdefiniowane w' '. Ale nawet jeśli plik ten jest dodawany do mostkowego pliku nagłówkowego, * this * constant nie jest narażone na Swift. –

0

Używam wartości "OGROMNY". jest to build_in readonly var;

1

aktualnej dokumentacji dla własności CAMediaTiming stanach repeatCount:

Ustawienie tej właściwości greatestFiniteMagnitude spowoduje, że animacja powtarzać zawsze.

I kompiluje się bez problemów:

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

Powodem że HUGE_VALF nie jest importowany do Swift jest została zdefiniowana jako „nietrywialne” makra w <math.h>:

# define HUGE_VALF __builtin_huge_valf() 
Powiązane problemy