2010-12-01 7 views
0

나는 UIView의 루트 나는 루트가 회전하는 것을 허용하지 않습니다아이폰 - 서브 뷰 회전 문제

의 하위 뷰 등의 UIView A를, 그래서는 루트 클래스

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

에 쓰기하지만 허용 클래스에서, 나는

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

쓰기 때문에 루트의 서브 뷰 (A)는 회전 수 그러나 루트와 그 서브 뷰 A를 모두 회전 할 수 없습니다 것으로 보인다.

A는 회전이 가능하지만 루트가 아닌 것을 어떻게 허용해야합니까?

감사

답변

3

조회수 shouldAutorotateToInterfaceOrientation에 대답하지 않는, 뷰 컨트롤러는 않습니다. 보기 컨트롤러가 회전 할 것이라고 말하면보기가 표시되고 모든 하위보기가 회전합니다. 보기 컨트롤러가 회전하지 않는다고 말하면보기가 회전하지 않으며 자식도 회전하지 않습니다. 비 회전 뷰가 회전 모든 것을 뒤에있는 경우

  • , 당신은 뷰 컨트롤러에서 제거 및 수 :

    에 따라 문제를 해결 정확하게 수행 할 작업에 대한 두 가지 접근 방법이있다 viewWillAppear에서 뷰 컨트롤러 뒤에있는 메인 애플리케이션 윈도우에 추가합니다. viewDillDisAppear에서 다시 제거합니다.

  • 회전하지 않는 뷰와 회전하는 뷰를 좀 더 복잡한 방식으로 혼합해야하는 경우 willAnimateRotationToInterfaceOrientation : duration :을 catch 할 수 있습니다. 비 회전 뷰에서 적절한 역변환을 설정하십시오. 그래서 그것의 회전과 unrotated. CoreAnimation이 작동하는 방식 때문에 특정 180도 회전 사이에서 올바른 동작을 얻으려면 약간 까다로울 필요가 있습니다.

UIApplication은 키 윈도우를 UIWindow 객체로 가져 오는 수단을 제공합니다. 이것은 첫 번째 아이디어에 대해 원하는 것입니다. UIWindow는 UIView에서 상속되므로 하위 뷰를 추가하고 배열하는 모든 표준 메커니즘이 적용됩니다.

후자의 경우 관련보기에서 변환을 설정해야합니다. superview에서 변환을 얻고, 역함수를 얻어서 뷰에 설정하십시오. 자세한 내용은 CGAffineTransform을 참조하십시오. CoreAnimation 문제는 가장 짧은 경로 (CoreAnimation이 취할 것임)에 따라 한 회전에서 다른 180 도로 다른 전환이 시계 방향과 반 시계 방향의 두 가지 가능한 솔루션을 제공한다는 것을 암시합니다. 실제로 인물 모드에서 인물 사진과 인물 사진을 회전 시키면 CoreAnimation이 올바른 사진을 찍을 수 있도록 인물 모드에서보기의 변형에 눈에 보이지 않는 바이어스를 추가해야합니다. iPhone을 사용하는 경우 해당 기기에서 UIInterfaceOrientationPortraitUpsideDown을 지원하지 않는 것이 좋습니다 (대부분의 Apple 앱에서는 지원하지 않습니다). 따라서 실제로는 그 방향을 지원하지 않는 것이 더 쉽습니다.

+0

죄송합니다. 내가 말한 것은 분명하지 않았습니다. 예, ViewController에 있습니다. 그러나 부모 뷰가 비 회전으로 설정되면 하위 뷰를 회전 할 수 있도록 설정하는 것이 쉽지 않은 것입니다. – Jack

+0

회전이 발생하는지 여부는 현재보기 컨트롤러에 달려 있습니다. 뷰 컨트롤러에 표시되는 뷰의 전부 또는 일부입니다. 그러나 창에 추가하는 뷰 컨트롤러는 하나만 회전 이벤트를받습니다. 안타깝게도이 문서가 처음으로 추가되었는지 또는 설명서의 최상위 부분인지는 알 수 없습니다. – Tommy