내가 작업중인 앱에서 발견 한 이상한 버그가 있습니다. 나는 세부에 도착하기 전에 I는 내 질문에 명시 것이다UIView 애니메이션 완료 블록이 호출되지 않음
1 - 왜 UIView의 애니메이션 완료 블록이 다음 모달보기 후 호출 될 것이다 - 왜 UIView의 애니메이션 완료 블록은
이 호출 할 수 없습니다 수여됩니까?
나는 뷰 컨트롤러가 나타난 후에 시작하는 일련의 UIView 애니메이션을 가지고 있습니다. 완료 블록이 있습니다. 애니메이션 완성 블록이 호출되는 시간은 대다수입니다. 그러나 종종 앱은 완료 블록이 호출되지 않는 상태가됩니다.
또한 새로운보기 컨트롤러를 현재보기 컨트롤러에서 모달로 제시하면 호출되기 전에 호출되지 않은 애니메이션 완료 블록이 호출됩니다.
일단 앱이이 상태에 있으면 모달보기를 다시 표시 할 때를 제외하고는 애니메이션 완료 블록이 다시 호출되지 않습니다.
내 애니메이션 블록은 기본적으로 이것이다 :
int i = 0;
for (UIView *view in self.cellImageViews)
{
[UIView animateWithDuration:CELL_ANIMATION_DISMISS_DURATION
delay:(i)*CELL_ANIMATION_STAGGER_INTERVAL
options:UIViewAnimationOptionCurveEaseIn
animations:^{
view.transform = CGAffineTransformTranslate(view.transform, 0, CELL_ANIMATION_DISMISS_TRANSLATION);
} completion:^(BOOL finished) {
NSLog(@"Animation Completed: i:%d, finished:%d, count%d",i,finished,[self.oldCellImageViews count])
if(finished && (i == ([self.cellImageViews count]-1)))
{
NSLog(@"if statement passed");
// My completion block stuff goes here
}
}
];
i++;
}
다음. 예, 애니메이션은 시차를두고 시작됩니다. 네 번째 애니메이션은 첫 번째 애니메이션이 시작되기 전에 시작됩니다. 왜 이것이 완료 블록이 호출되는 것을 막을 수 있습니까? (그리고 왜 가끔씩 만 사용합니까?) – Darren
@ NJGadhiya의 코멘트를보세요. 여기에있는 키워드는'CALayer' 대'CAAnimation'입니다. 동일한 객체에 대해 다른 'CALayer'변환을 예약하여 주어진 객체에 대한'CALayer' 변환을 방해하고 있습니다. 내가 설명한 방법 중 하나를 사용하고 싶지 않고'CAAnimation'으로 전환하지 않는다면 옵션에'UIViewAnimationOptionBeginFromCurrentState'를 추가하면됩니다. – SwiftArchitect