removeFromSuperview:
이 호출되기 전에 animateWithDuration:animations:completion:
을 사용하여 내 사용자 인터페이스의 여러 요소 (약 4 개 요소)를 이동 시켰습니다.조치를 취하기 전에 여러 블록이 실행을 완료했는지 어떻게 알 수 있습니까?
제 질문은 removeFromSuperview:
에 전화하기 전에 모든 애니메이션이 완료되었음을 어떻게 알 수 있습니까?
removeFromSuperview:
이 호출되기 전에 animateWithDuration:animations:completion:
을 사용하여 내 사용자 인터페이스의 여러 요소 (약 4 개 요소)를 이동 시켰습니다.조치를 취하기 전에 여러 블록이 실행을 완료했는지 어떻게 알 수 있습니까?
제 질문은 removeFromSuperview:
에 전화하기 전에 모든 애니메이션이 완료되었음을 어떻게 알 수 있습니까?
내 자신의 질문에 답변.
// Create dispatch queue & group
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
// Two group enters
dispatch_group_enter(group);
dispatch_group_enter(group);
// (notice the group parameter in dispatch_group_leave)
[UIView animateWithDuration:0.3 animations:^{
self.pickerView.frame = CGRectMake(self.pickerView.frame.origin.x
, self.view.bounds.size.height + self.pickerView.frame.size.height/2
, self.pickerView.frame.size.width
, self.pickerView.frame.size.height);
} completion:^(BOOL finished){
dispatch_group_leave(group);
}];
[UIView animateWithDuration:0.3 animations:^{
self.navigationBar.frame = CGRectMake(self.navigationBar.frame.origin.x
, -self.navigationBar.frame.size.height
, self.navigationBar.frame.size.width
, self.navigationBar.frame.size.height);
} completion:^(BOOL finished){
dispatch_group_leave(group);
}];
// Finishing callback
dispatch_group_notify(group, queue, ^{
[self.view removeFromSuperview];
});
// Release the group
dispatch_release(group);
내가이 다른 사람에 대한 예로서 역할을 할 수 있기를 바랍니다 :
나는 이런 식으로 뭔가를하고 결국.
정답으로 추가하십시오. –
디스패치 대기열을 생성하고 수행중인 애니메이션의 수만큼 대기열을 대기시킵니다. 슈퍼 뷰에서 제거를 수행하는 블록을 큐에 추가하십시오. 각 애니메이션의 완료 블록에서 일시 중단 된 큐를 다시 시작합니다. 마지막 하나가 완료되면 대기중인 블록이 실행됩니다.
일부 코드로 자세히 설명해 주시겠습니까? – Goles
CATransaction도 사용할 수 있습니다. 포함 된 모든 애니메이션을 잡습니다.
[CATransaction begin];
[CATransaction setCompletionBlock:^{ // all animations finished here }];
[UIView animateWithDuration...
[UIView animateWithDuration...
...
[CATransaction commit];
이렇게하면 애니메이션을 직접 추적 할 필요가 없습니다.
여러 블록을 만드는 대신 애니메이션 섹션에서 한 번에 애니메이션을 적용 할 수 없습니까? –
애니메이션의 지속 시간과 스타일이 다른 경우가 아니라 – Goles
개의 [UIView animateWithDuration 호출의 중첩 그룹에 대해 단일 완성 블록을 호출하는 방법]은 복제 할 수 있습니까?] (http://stackoverflow.com/questions/8421441/how-to-invoke -a-single-completion-for-nested-group-of-uiview-animatewith) –