해당 코드 스 니펫에서 실제로 수행되는 작업은 매우 중요합니다. 애니메이션이 한 뷰에서 다른 뷰로 전환 중입니다. 첫 번째 뷰가 대체되고 현재 뷰가 표시되는 뷰를 유지하도록 부울이 설정됩니다. 부울은 완료 블록에 설정됩니다. 이 경우
[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
플래그가 선택되어있는 이유입니다.
해당 가이드의 다른 코드 샘플 중 대부분은 (전부는 아닐지라도) 플래그가 선택되지 않았 음을 알 수 있습니다. 이는 해당 사례에서 중요하지 않기 때문입니다 (예 : 첫 번째 이후 다른 애니메이션 실행 또는 변경 일부 값은 이 아니며은 애니메이션 완료에 따라 다릅니다.
그래서 완료된 블럭이 실제로 완료되면 bool이 0 인 경우에도 실행될 수 있습니다. 왜 그런 일이 일어 났을까요? 그것은 "완료"블록이기 때문에 이전 블록이 실제로 완료된 경우에만 실행되지 않겠습니까? – johnbakers
그 중 하나의 방법으로 새로운 애니메이션을 시작하면 새로운 애니메이션이 먼저 중단되게하는 옵션이 있습니다. 보기와 사용자 상호 작용을 허용하는 옵션도 있는데, 애니메이션을 취소 할 수있는 기회가 될 수 있습니다. –
doc에 따르면 transitionFromView는 애니메이션 시작 시점에서 toView를 추가하고 애니메이션 끝에서 superView에서 fromView를 가져옵니다. 완료된 경우 fromView fromView보다 false이고 toView가 여전히 존재 함을 의미합니까? 내 경우에는 두 가지가 모두 사라진 경우를 보았습니다. –