2013-01-23 3 views
0

두 개의 ViewController를 사용합니다. MainView와 FlipViewController. MainView에는 일련의 버튼과 컨트롤 및 그래픽 디스플레이가 포함되어 있으며 FlipView에는 설정이 포함되어 있습니다.IOS 오리엔테이션과 FlipViewController 및 마스터보기

MainView는 내가 지원하는 다양한 버튼과 그래픽 화면을 지원하기 위해 방향에 따라 다른 XIB를로드합니다. 이렇게하면 상황에 따라 다르게 배치 할 수 있습니다. StoryBoarding 기능이 Xcode에 추가되기 전에 프로젝트가 처음 생성되었습니다.

정상적인 사용법은 MainView에서 세로 모드로 시작한 다음 플립 뷰를 회전시키는 버튼을 터치합니다. FlipView (프로그램의 여러 부분 구성)에서 작업을 수행 한 다음 변경 사항을 커밋하면 MainVIew로 돌아갑니다. 지금까지는 모두 좋았습니다.

FlipView를 입력하고 FlipView가 다른 방향을 갖도록 장치를 회전하면 문제가 발생합니다. Portrait를 Lanscape로 회전시킵니다. 그런 다음 FlipView에서 MainView로 돌아갑니다. 이 시점에서, MainView는 FlipView가 수행 한 Rotation에 대해 알지 못합니다. 그래서 Portrait XIB와 함께 Portrait에서 MainView를 보여줍니다.

MainView의 willRotateToInterfaceOrientation은 FlipViewController에서 반환 한 후에 절대로 호출되지 않습니다. 따라서 오리 엔테이션 변경에 대해 결코 알 수 없으므로 결과적으로 오리 엔테이션에 대한 잘못된 XIB가 유지됩니다. 여기

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 

// if portrait, load the portrait XIB for Pad or Phone 

if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) { 

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 

     [[NSBundle mainBundle] loadNibNamed:@"MainViewiPad" owner:self options:nil]; 

    }else{ 

     [[NSBundle mainBundle] loadNibNamed:@"MainView" owner:self options:nil]; 

    } 

    [self viewDidLoad]; 

    intorient = 1; 
else.... handle Landscape... 

그래서 나는 viewWillAppear 루틴이 회전에 대해 알아 및 시스템 - 그것을 수행 할 MAINVIEW을 야기 할 수있는 방법을 찾기 위해 노력을 실험 한 willRotateToInterfaceOrientation의 방향 핸들러의 샘플입니다 ... 현명한 방식으로. 그러나 지금까지 나는이 방식으로 시스템을 작동시키는 방법을 모른다. viewWillAppear 호출 될 때 올바른 방향으로 다시로드 할 코드를 생성해야 할 것 같아요. 하지만 시간에로드 된 변경 내용을 가져 오는 것 결코 보이지 않는 및 올바르게 viewWillAppear 메시지 내에서 새 XIB 다시로드하려고 시도하는 것 때문에이 올바르게 작동하지 않습니다.

이 동작을 이해하는 데 큰 도움이됩니다.

답변

0

확인. 나는이 문제를 여기에서 발견했다. 문제는 순환 게재에 대한 정보가 MainView로 다시 전송되지 않는다는 것입니다. FlipView (누가이 오리엔테이션 메시지에 반응하는지)를 통해 MainView로 메시지를 다시 보내면 쉽게 처리 할 수 ​​있습니다. FLipView을 내 코드 (이것은 자동 회전을 처리했다) 회전 메시지를 전 아무것도 아니었지만, 지금은이 같은 FlipView에 처리기를 추가 : 기본적으로 회전 메시지를 전달하고

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
     [mainView willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; 
} 

MainView로 돌아갑니다. 이것은 FlipView가 열릴 때 MainView가 사라지지 않기 때문에 작동합니다. 그것은 뒤쪽에 머물러 있으며 여전히 메시지에 응답 할 수 있습니다.

주의 할 점은 위 코드에서 mainView에 대한 참조가 있다는 것입니다. 필요한 경우이 호출을 할 수 있도록 FlipView alloc-init 다음에이 함수를 전달해야합니다. 즉, Flipview 코드의 MainView 클래스에 새 속성을 추가하는 것입니다.

은 내가 FlipView을 열기 전에 MAINVIEW에서 같은 것을 할 :

FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"FlipsideView" bundle:nil]; 


controller.delegate = self; 
controller.mainView = self; 
controller.lastIndexPath = lastIndex; 
controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
[self presentModalViewController:controller animated:YES]; 

희망이 문제의이 유형을 가진 다른 사람을 도움이됩니다. 웹 뷰어를 모달로 열었을 때도 같은 동작을 보았습니다. 동일한 유형의 문제를 처리하기 위해 동일한 기술을 사용했습니다.