2013-02-24 20 views
10

Właśnie przepisał spora animacji z niemych podczas pętli (wypalanie drawRect: x razy) i to jest ostatnia rzecz, że po prostu nie może dowiedzieć się ..CABasicAnimation aktualny czas, który upłynął

Jak mogę dostać obecny czas mojej animacji? Wiem jak zdobyć aktualną CFTimeInterval (Is there a way to pause a CABasicAnimation?):

CFTimeInterval currentTime = [self.multiplierLayer convertTime:CACurrentMediaTime() fromLayer:nil]; 

Ale jak mogę to wykorzystać do obliczenia aktualnego czasu, który upłynął od momentu moja animacja zacząć? Wygląda na to, że beginTime ma zawsze wartość 0.0, czy muszę ustawić w momencie rozpoczęcia animacji, a następnie wyodrębnić currentTime z beginTime?

Przykro mi, jeśli to coś prostego, że przeoczyłem, właśnie zacząłem używać Core Animation wczoraj. :)

Edit: Ustawianie begintime jest nie sposób to zrobić, naprawdę ze stratą tutaj.

+0

Dlaczego po prostu nie możesz nagrać bieżącego czasu, kiedy animacja się zaczęła (co wiesz, że musisz ją uruchomić)? – trojanfoe

+1

lub być delegatem i sprawdzić w 'animationDidStart:' –

+0

Tak połączone; zapisz bieżący czas wewnątrz 'animationDidStart:'. Tak, to byłoby dobre dla pojedynczej animacji, ale co z wieloma animacjami? Po prostu śledź je wszystkie? Szkoda byłoby, gdyby nie było innego sposobu na wykorzystanie czasu z animacji. –

Odpowiedz

6

A mogą łatwiejszy sposób, aby robić to, co chcesz, to podczas tworzenia CABasicAnimation jawnie ustawić czas rozpoczęcia, jak:

basicAnimation.beginTime = CACurrentMediaTime(); 

Później można dowiedzieć się, ile czasu upłynęło z:

CFTimeInterval elapsedTime = CACurrentMediaTime() - basicAnimation.beginTime; 

i uzyskać procent przez z:

progress = elapsedTime/basicAnimation.duration; 

(hasło będzie nieco bardziej skomplikowany, jeśli masz timeOffset lub coś w tym stylu.)

Powiązane problemy