2012-01-28 5 views
5

Ho un CALayer che semplicemente creo e aggiungo a una sottoview della vista principale del mio controller di visualizzazione nel initWithNibName del controller: E quindi, eseguo la seguente animazione:come posso rilevare il completamento di un'animazione innescata da CATransaction

[CATransaction begin]; 
    [CATransaction setAnimationDuration:2]; 
    [logoLayer setOpacity:0]; 
    [CATransaction commit]; 

Come posso sapere quando l'animazione è terminata? the performSelector: ritardato di 2 secondi. approccio non sembra "la strada giusta" per farlo.

risposta

22

Secondo lo doc, [CATransaction setCompletionBlock:] potrebbe essere utilizzato per quello che vuoi.

Si dice

L'oggetto blocco completamento è garantito essere chiamato (sul thread principale) non appena tutte le animazioni successivamente aggiunto da questo gruppo di transazione hanno completato (o sono stati rimossi.) Se non animazioni vengono aggiunti prima che venga eseguito il commit del gruppo di transazioni corrente (o che il blocco di completamento sia impostato su un valore diverso), il blocco verrà richiamato immediatamente.

Provare ad aggiungere qualcosa come questo prima di begin la transazione di animazione.

[CATransaction setCompletionBlock:^{ 
    // Action after the animation completion 
}]; 
+5

La parola operativa in quel documento è "successivamente". Non pensare (come ho fatto prima) che il blocco di completamento si applichi all'intera transazione. Si applica solo alle animazioni aggiunte alla transazione dopo che è stata impostata. –