L'azione effettiva intrapresa in quello snippet di codice è piuttosto significativa. L'animazione sta passando da una vista all'altra - la prima viene sostituita, quindi un booleano è impostato per tenere traccia di quale è attualmente visualizzata. Il booleano è impostato nel blocco di completamento.
[UIView transitionFromView:(displayingPrimary ? primaryView : secondaryView)
toView:(displayingPrimary ? secondaryView : primaryView)
duration:1.0
options:(displayingPrimary ? UIViewAnimationOptionTransitionFlipFromRight :
UIViewAnimationOptionTransitionFlipFromLeft)
completion:^(BOOL finished) {
if (finished) {
displayingPrimary = !displayingPrimary;
}
}];
In questo caso, se l'animazione (per qualsiasi motivo) non completa, quindi il punto di vista non sono stati scambiati, e che assolutamente non vuole capovolgere il valore di displayingPrimary
, perché' Avremo quindi una registrazione inaccurata del tuo stato. Ecco perché in questo caso viene selezionato il flag finished
.
Si noti che nella maggior parte (se non tutti) degli altri esempi di codice in tale guida, il flag non è selezionato, perché in questi casi non è significativo (eseguendo un'altra animazione dopo la prima, ad es., O cambiando un certo valore che non corrisponde a dipende dal completamento riuscito dell'animazione).
fonte
2012-05-02 18:37:20
quindi sembra che un blocco di completamento possa essere eseguito anche se il bool finito è zero. perché dovrebbe succedere? poiché si tratta di un blocco di "completamento", non funzionerebbe solo se il blocco precedente fosse effettivamente completato? – johnbakers
Avvio di una nuova animazione con uno di questi metodi, c'è un'opzione per fare in modo che il nuovo interrompa il primo. C'è anche un'opzione per consentire l'interazione dell'utente con la vista, che può presentare un'opportunità per annullare l'animazione. –
Secondo doc la transizioneFromView aggiunge il toView all'INIZIO dell'animazione e ottieni daView fuori da superView alla fine dell'animazione. Significa che se finito è falso di ENTRAMBI fromView e toView è ancora lì? Perché nei miei casi ho visto casi in cui entrambi sono spariti. –