2013-09-16 3 views
2

보기 컨트롤러 포함을 사용하여 6 개의보기 컨트롤러 사이를 전환합니다. 전환은 분할 된 컨트롤을 사용하여 제어됩니다. 이전의 전환이 완료되기 전에 분할 된 컨트롤의 버튼을 누르지 않으면이 모든 것이 올바르게 작동합니다.보기 컨트롤러 전환이 너무 빨리 수행되면 응용 프로그램이 충돌합니다.

코드입니다 : -이 상황에서

와 응용 프로그램의 충돌 '[: toViewController : 지속 시간 : 옵션 : 애니메이션 : 완료 UIViewController에 transitionFromViewController]가 및 어린이보기 컨트롤러 호출 공통의 부모 뷰 컨트롤러가 있어야합니다'

[self transitionFromViewController:currentVC 
        toViewController:newVC 
          duration:1.0 
          options:UIViewAnimationOptionTransitionFlipFromRight 
         animations:nil 
         completion:^(BOOL finished) { 
          [currentVC removeFromParentViewController]; 
          [newVC didMoveToParentViewController:self]; 
          currentVC = newVC; 
         }]; 

애니메이션이 완료 될 때까지 세그먼트 화 된 컨트롤을 비활성화해야합니까? 아니면이 문제를 피하는 더 좋은 방법입니까? 애니메이션 시작하고 각각 종료 될 때

[[UIApplication sharedApplication] beginIgnoringInteractionEvents]; 
[[UIApplication sharedApplication] endIgnoringInteractionEvents]; 

를 호출하여

답변

2

비활성화 및 다시 활성화 응용 프로그램의 상호 작용을 할 수 있습니다. 앱은 애니메이션이 완료 될 때까지 모든 상호 작용 (터치 이벤트)을 무시하므로 안전하기 전에 세그먼트가 이벤트를받지 못합니다 (애니메이션이 완료됩니다).

이 접근법은 일부 기본 제공 컨테이너 컨트롤러에서도 사용된다고 생각합니다. 그러나 애니메이션 기간에주의하십시오. 애니메이션이 오랜 시간이 걸리면 앱이 응답하지 않는 것처럼 보일 수 있습니다. 사용자 경험이 아플 수 있습니다.

+0

해결되었습니다. 감사합니다 –

+0

단순히 세그먼트 화 된 컨트롤 자체와의 상호 작용을 비활성화하는 것으로 충분하지 않습니까 ('self.segmentedControl.userInteractionEnabled = NO;')? 그건 내 유스 케이스에 맞는 것 같다. –

+0

@RobertAtkins 귀하의 필요에 충분하다면 확실합니다. 내 대답은 충돌을 막는 가장 극단적 인 해결책이지만 이상적인 해결책이 아닙니다 (또는 문제가되는 코드를 포함하기위한 변명이 아닙니다) ;-) –