2011-01-05 2 views
0

가로 및 세로 방향을 모두 지원하는보기 컨트롤러를 만들려고하지만 은 회전 할 수 없습니다. 회전 그 사이에, 즉 뷰는 원래의 방향을 유지해야합니다.가로 및 세로를 모두 지원하지만보기간에 회전하지 않는 (처음 방향을 유지하는)보기 컨트롤러를 만드는 방법

내가 바르 initialOrientation을 만든 다음

initialOrientation = self.interfaceOrientation; 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return (interfaceOrientation == initialOrientation); 
} 

-viewDidAppear에서 설정하지만 그건 (-shouldAutorotateToInterfaceOrientation-viewDidAppear 전에 호출됩니다 아마도 때문에) 혼란 문제가 발생 노력했다.

오리엔테이션을 원래 방향으로 잠글 수있는 방법은 무엇입니까?

답변

1

나는 올바른 길을 가고 있었다고 생각됩니다. 내가 가지고하는 이상한 요구 사항의 비트가 아니라 뭔가 OrientationLockedViewController

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return (interfaceOrientation == self.initialOrientation); 
} 
0

에 내가 UIKit 생각 지금

OrientationLockedViewController *vc = [[OrientationLockedViewController alloc] init]; 
vc.initialOrientation = self.interfaceOrientation; 

: 나는 전화의 ViewController에서 설정 한 후, 속성을 initialOrientation함으로써이 문제를 해결 처리하도록 설계되었습니다. UIKit이 -shouldAutorotateToInterfaceOrientation을 호출 할 때 문서화 된 것으로 생각하지 않습니다. 또는이 결과가 캐시 될 수있는 시간이 길어서이 동작이 중요 할 경우 두 가지 가능성이 있음을 알 수 있습니다.

  1. 설정 initialOrientiation 초기가 아닌 이전 그래서 당신의 -shouldAutorotateToInterfaceOrientation 행동이 결코 변경되지하지만 응용 프로그램은이 시작 방향을 존중합니다. 당신이 표시하기 전에

  2. 장치의 방향을 감지하는 경우 당신은 당신의 뷰 컨트롤러를 초기화하기 때 이 컨트롤러의 뷰는 뷰의 회전 변환을 직접 적용합니다. 뷰 컨트롤러 계층 구조에 따라 장치를 회전 할 수 있도록 모든 회전에 대한 지원을 알리고 장치의 방향에 관계없이 항상 같은 방향으로 회전하도록보기의 변형을 설정해야 할 수 있습니다.

+0

나는 느린 것처럼 보이고 옵션 # 1에갔습니다. 이 컨트롤러 인스턴스가 보이지 않을 때 'initialOrientation'을 전환 할 필요가없는 한이 작업은 안정적으로 작동해야합니다. – Jonah

+0

좋은 지적입니다. 'initialOrientation'속성의 이름을 지정하면 뷰가 화면 밖에있는 경우에도이 값을 변경하는 것이 지원되지 않습니다. –

관련 문제