2011-11-04 3 views
3

저는보기 컨트롤러를 만들고 Xcode 4.2 (인터페이스 작성기)에서보기 방향을 가로 방향으로 설정했습니다. 그러나보기를 추가하면보기가 세로 방향으로 표시됩니다. 모든보기 컨트롤러에서 ShouldAutorotateToInterfaceOrientation을 true로 반환하여 다음 코드를 사용하여 수동으로보기를 회전하려고 시도했습니다.Monotouch - 가로 방향으로 만든보기가 세로 방향으로 표시됩니다.

this.View.Transform.Rotate (3.14f * .5f);

보기 프레임이 이미 올바르게 설정되어 있지만 가로 프레임 (예 : 480 X 320)으로 프레임을 설정하려고했습니다.

그냥 명확히하기 위해, 내 의견의 대다수는 초상화입니다. 장치가 실제로 어떤 방향인지에 관계없이 가로보기로 가로보기를로드하려고합니다. 이것이 가능합니까? 그렇다면 무엇을 놓치고 있습니까?

이 문제에 대한 도움을 미리 감사드립니다.

업데이트 : ShouldAutorotateToInterfaceOrientation은 뷰가로드 될 때 한 번만 호출된다는 사실을 알고 있습니다. 장치가 회전 할 때 호출되지 않습니다. 이것은 정상적인 행동입니까?

+0

ShouldAutorotateToInterfaceOrientation을 재정 의하여 true를 반환했다고 말하면 다음을 반환한다는 것을 의미합니까? : return toInterfaceOrientation == UIInterfaceOrientation.LandscapeLeft || toInterfaceOrientation == UIInterfaceOrientation.LandscapeRight; – Anuj

답변

-1

가로 방향보기에서 항상 가로 방향으로 표시하려는 경우 ShouldAutorotateToInterfaceOrientation에서 False를 반환하거나 오버라이드를 모두 제거해야한다고 생각합니다. 이렇게하면 장치가 세로 모드 일 때 화면이 자동으로 회전하는 것을 방지 할 수 있습니다.

+0

ShouldAutorotateToInterfaceOrientation (true 반환, false 반환, 함께 모두 제거)에 대한 모든 다른 옵션을 시도하고 동작이 변경되지 않았습니다. 문제는 자동 회전을 방지하지 못합니다. 뷰가 전혀 회전하지 않습니다. 그냥 세로로 표시됩니다.XCode 4.2 (Interface Builder)의 뷰에 대한 "Simulated Metrics"아래의 "Orientation"옵션은 뷰를 표시해야하는 방향을 지정합니까? 아니면 회전시키기 위해 다른 작업을 수행해야합니까? – Auc

+0

시뮬레이션 된 측정 항목의 설정 중 런타임에 UI에 영향을주지 않는 것은 "what-ifs"입니다. 다음은 생각입니다. Mono 프로젝트 설정에서 모든 장치 방향을 지원한다고 표시 했습니까? 프로젝트 설정을 열고 빌드를 확장 한 다음 iPhone 응용 프로그램 영역으로 이동하십시오. 거기에서 앱이 지원하는 방향 목록을 찾을 수 있습니다. 모두 선택되었는지 확인한 다음 ShouldAutorotateToInterfaceOrientation 재정의를 복원하고 true를 반환합니다. –

+0

competent_tech에 감사하지만 변경 사항은 없습니다. 오리엔테이션을 지정하는 것이 사소한 일일 것이라고 생각했지만, 분명히, 나는 잘못 생각했습니다. 또한 this.View.Transform.Rotate (3.14f * 0.5f)를 통해 뷰를 회전해야합니까? 이 선은 어떤면에도 영향을 미치지 않습니다. – Auc

4

ShouldAutorotateToInterfaceOrientation은 장치 방향이 변경 될 때마다 호출됩니다.

public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation) 
     { 
      Console.Out.WriteLine(toInterfaceOrientation.ToString()); 
      // Return true for supported orientations 

      // This particular screen is landscape only! 
      return (toInterfaceOrientation == UIInterfaceOrientation.LandscapeLeft || toInterfaceOrientation == UIInterfaceOrientation.LandscapeRight); 
     } 

이 코드는 뷰가 landscapeleft 또는 landscaperight 모드에서 자신의 방향을 허용하고 콘솔에 매번 새로운 장치 방향을 기록합니다.

뷰를로드 및 UINavigationController가하지만, 세로 모드에서 여전히 (예를 들어)으로 푸시 (그리고 ShouldAutorotateToInterfaceOrientation가 호출되지 않습니다.)

을 목표 - C에서

, 그것은 강제로 매우 쉽게 장치 방향이지만 MonoTouch에서는 직접 매핑이없는 것처럼 보입니다.

상기 용액;

우리가 원하는 방향을 지정하여 objective-c 런타임에 메시지를 보냅니다.

당신은 쉽게보기 컨트롤러에 다음을 추가하여이 작업을 수행 할 수 있습니다

Selector orientationSetter; 

     private void SetOrientation (UIInterfaceOrientation toOrientation) 
     { 
      if (orientationSetter == null) 
      { 
       orientationSetter = new Selector ("setOrientation:"); 
      } 

      Messaging.void_objc_msgSend_int (UIDevice.CurrentDevice.Handle, 
      orientationSetter.Handle, (int)toOrientation); 
     } 

이제 수동으로 전체 장치의 방향을 변경할 수 있습니다. 게다가 UINavigationController를 사용하면이 뷰가 스택 밖으로 팝되면 방향이 정상으로 돌아갑니다.

관련 문제