Ответ 1
Фактическое действие, выполняемое в этом фрагменте кода, весьма значимо. Анимация переходит из одного представления в другое - первое заменяется, а затем логическое значение задается для отслеживания того, какой из них отображается в данный момент. Логическое значение задано в блоке завершения.
[UIView transitionFromView:(displayingPrimary ? primaryView : secondaryView)
toView:(displayingPrimary ? secondaryView : primaryView)
duration:1.0
options:(displayingPrimary ? UIViewAnimationOptionTransitionFlipFromRight :
UIViewAnimationOptionTransitionFlipFromLeft)
completion:^(BOOL finished) {
if (finished) {
displayingPrimary = !displayingPrimary;
}
}];
В этом случае, если анимация (по какой-либо причине) не завершена, то точки зрения не обмениваются, и вы абсолютно не хотите переворачивать значение displayingPrimary
, потому что тогда вы иметь неточную запись вашего статуса. Вот почему флаг finished
отмечен в этом случае.
Обратите внимание, что в большинстве (если не все) других образцов кода в этом руководстве флаг не проверяется - это потому, что он не является значительным в этих случаях (запуск другой анимации после первого, например, или изменение некоторых значение, которое не зависит от успешного завершения анимации).