2011-02-25 2 views
2

나는 자동 회전하고 싶지 않은 글쓰 뷰가있는 어플리케이션을 만들고 있는데, UIKit 뷰 위에는 이 있고,은 자동으로 회전해야합니다.일부 UIView는 회전하지만 전부는 아닙니다.

분명히이 문서는 좋은 문서를 찾을 수 없어 귀하가해야 할 일이 아닙니다. 그러나 나는 이것이 내가 원하는 바를 정확히 확신한다.

나는 해결책을 찾았지만 해키 느낌 :

  1. 하는 창을 만들 수 있습니다.
  2. 일부 자동 회전 UIViewController를 만듭니다.
  3. 보기를 창에 추가하십시오.
  4. 이 아닌 OpenGL ES보기 컨트롤러를 만들려면 자동 회전을 사용하십시오.
  5. 창을 해당 창에 추가하십시오.
  6. 자동 회전보기의 경우 bringSubviewToFront를 호출합니다.
  7. 자신이 최고 5 점을 부여하는 동시에 잔소리가 심한 괴롭힘을 무시하려고합니다.

누구나 더 나은 해결책을 알고 계십니까? NB : GL 뷰가 아닌 UIKit 뷰를 자동 회전시키고 싶다는 점은 절대적으로 긍정적입니다.

감사합니다. 많은 시간을 내 주셔서 감사합니다. =)

답변

1

제안한 것보다 더 좋은 방법은 없습니다.

OpenGL보기도 회전 만 하시겠습니까? 응용 프로그램이 ES 2.0 장치 및 iOS 4.2에 제한되어 있으면 OpenGL보기에서 UIViewController 순환을 사용하면 성능상의 불이익이 사라집니다.

0

회전 할 때 OpenGL 콘텐츠를 옆으로 그려 보는 것이 더 간단하지 않습니까? 렌더러에서 회전을 적용하여 OpenGL보기의 회전을 취소하면됩니다.

원래 회전으로 되돌릴 수없는 점프가 발생할 수도 있지만 쉽게 해결할 수 있습니다. 일단 뷰가 회전을 마쳤 으면 리턴 회전을 애니메이트 할 수 있습니다. 또는 willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:을 덮어 쓰면 인터페이스 회전 중에 콘텐츠를 계속 움직일 수 있습니다.

0

그래서 나는 장면 뒤에서 어떻게 작동하는지 알아 냈습니다. Frogblast가 맞습니다. 실질적으로 더 좋은 방법은 없습니다.

발생하는 상황은 하위보기가없는 창에보기가 추가되면보기의 컨트롤러가 자동으로 "회전 권한"입니다. 해당 뷰 컨트롤러가 shouldAutorotateToInterfaceOrientation에서 NO를 반환하면 다른 뷰도 회전하지 않습니다. 그러나 "회전 권한"이 일 때 이 아닌 은 회전 할 수 없으므로 후속 뷰 (컨트롤러 사용)는이 회전해도 허용됩니다.

그들이 왜 이렇게 만들었는지 불분명하지만, 거기에 당신이 있습니다.

2

비슷한 상황에서 다른 전략을 생각해 냈습니다. 필자의 경우 모든 뷰가 회전 할 수 있도록 허용하지만 변형을 사용하여 원래의 방향으로 안정적으로 유지하려는 뷰를 가져옵니다.이것은 "회전하지 않는"뷰가 정사각형이기 때문에 작동하지만 조금 더 계산하면 다른 모양에서도 사용할 수 있습니다. 여기에 내가 컨트롤러의 내 willRotateToInterfaceOrientation:duration:

switch (toInterfaceOrientation) { 
    case UIInterfaceOrientationPortrait: 
     steadyView.transform = CGAffineTransformIdentity; 
     break; 
    case UIInterfaceOrientationLandscapeLeft: 
     steadyView.transform = CGAffineTransformMakeRotation(M_PI_2); 
     break; 
    case UIInterfaceOrientationPortraitUpsideDown: 
     steadyView.transform = CGAffineTransformMakeRotation(M_PI); 
     break; 
    case UIInterfaceOrientationLandscapeRight: 
     steadyView.transform = CGAffineTransformMakeRotation(3*M_PI_2); 
     break; 
} 

steadyView는 S의 서브 뷰에 넣어거야. 이것은 트릭을 할 것으로 보인다.

관련 문제