iOS6에서 특정 View Controller에서의 화면 회전(Auto rotation) 제어하기

h3 앱을 구현하면서 릴리즈 후 modal 된 view controller 들이 회전이 되어버리는 문제가 생겨서 이 부분을 수정하였다.

수정한 것을 설명하기 이전에 알아두어야 할 것은 auto rotation에 관련된 base method가 변경되었다는 것이다.
UIViewController를 들여다보면 이전에 사용하던 – (BOOL)shouldAutorotateToInterfaceOrientation: 메소드가 deprecated되고,
대신 -(BOOL)shouldAutorate 메소드와 -(NSUInteger)supportedInterfaceOrientations,  -(UIInterfaceOrientation)preferredInterfaceOrientationForPresentations 가 추가된 것을 볼 수 있다.

즉, iOS6에서는 기존에 사용하던 메소드가 동작하지 않는다는 것이며, 새로운 메소드를 이용해야 한다는 것을 볼 수 있다.
Deployment target이 5.x 일 경우에는 기존 메소드를 정의해놓는 것은 잊지 말고…

처음에 언급했던 이슈에 대해서는 사실 메뉴와 컨텐츠가 위치한 main view controller에서 미리 적용하여 문제가 없었으나,
로그인/회원가입, 사전등록 페이지에서는 화면이 돌아가버리는 문제점이 생겼다. 위의 메소드가 적용되었음에도 말이다.

이 문제 해결을 위해 애플 공식 문서를 비롯해 여러 자료를 참고하다보니 언뜻 떠오른 방법이 생각나 이를 적용했더니 깔끔하게 해결되었다.

문제는 view controller가 modal 할 때 UINavigationController를 품고 modal 되니 auto rotation의 주체는 view controller가 아닌 UINavigationController였다.
따라서, UINavigationController를 상속받는 custom view controller를 정의하여
여기에 -(BOOL)shouldAuotorate와 – (NSUInteger)supportedInterfaceOrientations를 아래와 같이 적용하였다.

이로써 문제 해결 완료!

 

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.