CATransition 페이드를 사용하는보기 컨트롤러를 푸시하는 것과 동일한 방법으로 UIActivityIndicatorView에서 애니메이션을 중지하려고합니다.UIActivityIndicatorView는 이전 CATransition의 애니메이션을 유지합니다. pushViewController
애니메이션을 멈추지 않고 다음보기 컨트롤러로 사라지는 대신 UIActivityIndicatorView는 지속 시간을 설정 한 시간에 관계없이 전체 페이드에 걸쳐 애니메이션을 적용합니다.
어떻게 회전을 멈출 수 있는지, 같은 방법으로 푸시/페이드를 할 수있는 아이디어는 무엇입니까? 내가 dispatch_after
을 사용 순식간 동안 지연하는 경우
- (void)pushView:(NSNotification *)notification {
[self.activityIndicator stopAnimating];
NextViewController* nextViewController = [[NextViewController alloc] init];
CATransition *transition = [CATransition animation];
transition.duration = 1.5f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;
[self.navigationController.view.layer addAnimation:transition forKey:nil];
[self.navigationController pushViewController:nextViewController animated:NO];
}
편집 다윗의 대답과 같은 라인을 따라 1
, 나는 성공적으로 stopAnimating
할 수 있었다. 내가 전에 이와 비슷한 무언가로 실행했습니다
- (void)pushView:(NSNotification *)notification {
[self.activityIndicator stopAnimating];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.0001 * NSEC_PER_SEC), dispatch_get_main_queue(), ^(void){
NextViewController* nextViewController = [[NextViewController alloc] init];
CATransition *transition = [CATransition animation];
transition.duration = 1.5f;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionFade;
[self.navigationController.view.layer addAnimation:transition forKey:nil];
[self.navigationController pushViewController:nextViewController animated:NO];
});
}
답장을 보내 주셔서 감사합니다. David. 불행히도'dispatch_async'는 나를 위해 작동하지 않았습니다. 그러나'dispatch_after'를 사용하여 트랜지션 블록의 실행을 지연 시키면,'stopAnimating'은 예상대로 동작합니다. 내 질문을 편집하여 코드를 수정 한 방법을 보여줍니다. 더 좋은 방법이있을 것입니다 ... – Snow
편집 된 코드를 확인하십시오. 모든 것을 기본 큐에 전달하는 것을 잊었습니다. – David
그래서 activityIndicator는 이제 애니메이션이 멈추지 만 뷰는 푸시하지 않습니다 .../어떤 아이디어입니까? 나는 어느 쪽이든 도움을 주셔서 감사합니다. – Snow