2013-05-20 1 views
4

두 개의보기 제어기 A와 B가 있습니다. A는 대신 B가 가로를 지원할 수있을 때 세로만을 지원하기위한 것입니다. 봉쇄 API를 사용하여 B를 표시하고 있습니다.회전 및 격납 api

[self addChildViewController:child]; 
[self.view addSubview:child.view]; 
child.view.frame = self.view.bounds; 
[child didMoveToParentViewController:self]; 

내가 구현 한

- (BOOL)shouldAutorotate 
{ 
    UIViewController *current = _presentingChild ? _child : self; 
    return [current shouldAutorotate]; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    UIViewController *current = _presentingChild ? _child : self; 
    return [current supportedInterfaceOrientations]; 
} 

모든 매력처럼 작동합니다. 프리젠 테이션 중에 기기가 가로 방향이고 B가 나타나면 즉시 회전합니다.

B를 닫을 때 문제가 발생합니다. 가로가 A 인 경우 가로로 표시됩니다.

이 문제를 해결하는 방법에 대한 제안이 있으십니까? 저는 모달 컨트롤러를 사용할 수 있다는 것을 알고 있습니다. 그러면 문제가 해결 될 것입니다. 하지만이 특정 상황에 대해 모달 VC를 사용하고 싶지 않습니다.

답변

1

올바르게 이해하면 shouldAutorotatesupportedInterfaceOrientations 메서드는 B viewcontroller가 포함 된 A viewcontroller 안에 있습니다.

맞다면 두 가지 방법을 구현 한 방법이 잘못되었습니다. 현재보기 컨트롤러가 자체 (_presentingChild 조건이 false 인 경우) 일 때 무한 재귀가 발생해야합니다. 예를 들어 shouldAutorotate가 호출되기 때문입니다 재귀 적으로 끝나지 않고 (당신은 [self shouldAutorotate]을 반환합니다). 당신은 무한 재귀가 발생하지 않는 경우

그래서 오직 두 가지 가능성이 있습니다 : 두 가지 방법이 호출되지 않습니다

  • _presentingChild 조건은 항상

확인 사실 및하자 나를 알고있다