La acción real emprendida en ese fragmento de código es bastante significativa. La animación está pasando de una vista a otra: la primera se reemplaza y luego se establece un booleano para realizar un seguimiento de cuál se muestra actualmente. El valor booleano se establece en el bloque de finalización.
[UIView transitionFromView:(displayingPrimary ? primaryView : secondaryView)
toView:(displayingPrimary ? secondaryView : primaryView)
duration:1.0
options:(displayingPrimary ? UIViewAnimationOptionTransitionFlipFromRight :
UIViewAnimationOptionTransitionFlipFromLeft)
completion:^(BOOL finished) {
if (finished) {
displayingPrimary = !displayingPrimary;
}
}];
En este caso, si la animación (por cualquier razón) no se completa, entonces los puntos de vista que no se han intercambiado, y a pesar de todo no quieren dar la vuelta al valor de displayingPrimary
, porque' Tendré un registro inexacto de su estado. Es por eso que el indicador finished
está marcado en este caso.
Observe que en la mayoría (si no todos) de los demás ejemplos de código en esa guía, el indicador no está marcado; eso es porque no es significativo en esos casos (ejecutando otra animación después del primero, por ejemplo, o cambiando algún valor que no depende de la finalización exitosa de la animación).
por lo que parece que un bloque de finalización puede ejecutarse incluso si el bool finalizado es cero. ¿Por qué sucedería eso? ya que es un bloque de "finalización", ¿no se ejecutaría solo si el bloque anterior realmente se completó? – johnbakers
Al iniciar una nueva animación con uno de esos métodos, hay una opción para que la nueva interrumpa la primera. También hay una opción para permitir la interacción del usuario con la vista, lo que puede presentar una oportunidad para cancelar la animación. –
Según doc the transitionFromView agregue the toView al COMIENZO de la animación y obtenga fromView out de superView al FINAL de la animación. ¿Eso quiere decir que si terminado es falso que AMBOS fromView y toView todavía está allí? Porque en mi caso, he visto casos donde los dos se han ido. –