2009-02-11 11 views
8

sto animare proprietà fotogramma di un UIView utilizzando un CAKeyframeAnimation sul CALayer della vista e animare la proprietà "position". Mi piacerebbe essere in grado di fermare l'animazione al suo stato attuale quando l'utente tocca lo schermo, ma non sono in grado di farlo.Arrestare In Progress CAKeyframeAnimation

posso fermare l'animazione abbastanza facilmente chiamando

[view.layer removeAnimationForKey:kFrameAnimationKey]; 

Il problema è che né la cornice della vista non è la posizione del livello vengono aggiornati direttamente l'animazione. Se guardo alla proprietà posizione al momento l'animazione inizia e quando finisce in

- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)finished 

non è cambiato.

Sembra che avete bisogno di fare che in modo esplicito quando l'animazione si ferma. Ma se l'animazione si arresta in qualche punto arbitrario, non sai quanto lontano è andato. Quindi la domanda è come far sì che l'animazione aggiorni la proprietà della posizione del livello mentre va, o come sapere fino a che punto l'animazione è andata quando è stata fermata.

risposta

21

È possibile ottenere questa interruzione dell'animazione catturando la presentazione Livello del livello di UIView di animazione, quindi applicare la sua cornice a UIView prima di rimuovere l'animazione. Ad esempio:

Questo sembra fornire il congelamento di UIView nella posizione animata corrente che stai cercando.

+0

Grazie per la risposta! sembra che la chiave qui sia capire cosa sia esattamente lo strato di presentazione di un CALAYER. Non sono sicuro che facciano un ottimo lavoro nel spiegarlo. Non sono ancora sicuro di quale sia il livello del modello. –

+0

La sezione "Core Animation Rendering Architecture" nella "Guida alla programmazione dell'animazione core" ha un bel diagramma di questo concetto. Fondamentalmente, il livello del modello è quello su cui normalmente si impostano i valori e il livello di presentazione è una copia di sola lettura che riflette lo stato istantaneo del livello. –

Problemi correlati