문제

메모:이 질문은 2008년에 나온 것이며 지금은 역사적 관심만 있을 뿐입니다.


기기의 위치에 관계없이 처음부터 가로 모드로 실행되는 iPhone 애플리케이션을 만드는 가장 좋은 방법은 무엇입니까?

프로그래밍 방식과 인터페이스 빌더 사용 모두.

도움이 되었습니까?

해결책

역사적인 답변만 가능합니다.엄청나게 오래된 것:

이 답변은 현재 매우 오래된 내용입니다.

이 게시물은 단지 역사적 호기심.


흥미로운 소식!아래 Andrew가 발견한 것처럼 이 문제는 Apple 4.0+에서 해결되었습니다.

더 이상 모든 뷰에서 뷰 크기를 강제할 필요가 없는 것으로 보이며 "처음에만 작동하는" 풍경의 심각한 문제가 해결되었습니다.

2011년 4월 현재 4.0 이하 버전을 테스트하거나 구축하는 것은 불가능하므로 이 질문은 순전히 역사적인 호기심일 뿐입니다.오랫동안 개발자들에게 얼마나 많은 문제를 안겨주었는지 정말 놀랍습니다!


원래 토론과 해결책은 다음과 같습니다.이러한 시스템은 작동조차 불가능하기 때문에 이것은 이제 전혀 관련이 없습니다.


이 작업을 완전히 수행하는 것은 매우 어렵습니다. 최소한 세 가지 문제/버그가 있습니다.

이 시도 .. 인터페이스 빌더 조경 디자인

특히 다음과 같은 부분에 유의하세요. "그리고 어디에서나 shouldAutorotateToInterfaceOrientation을 적절하게 사용해야 합니다." 이는 어디에서나 모든 전체 화면 보기를 의미합니다.

이 악몽에 도움이 되기를 바랍니다!

여기에 잘 알려진 추가 문제에 대한 중요한 알림이 있습니다.사이를 바꾸려고하는 경우 하나 이상 보기(모든 풍경), 단순히 작동하지 않습니다.이것을 기억하는 것이 필수적입니다. 그렇지 않으면 문제로 인해 며칠을 낭비하게 될 것입니다.말 그대로 불가능합니다.이는 iOS 플랫폼에서 알려진 가장 큰 공개 버그입니다.말 그대로 하드웨어가 로드한 두 번째 뷰를 가로 모드로 만들 수 있는 방법은 없습니다.짜증나지만 간단한 해결 방법과 해야 할 일은 아무 작업도 수행하지 않고 뷰 간에 전환할 수 있게 해주는 간단한 마스터 UIViewController를 갖는 것입니다.

즉, iOS에서는 알려진 주요 버그로 인해 다음과 같습니다.

[window addSubview:happyThing.view];
[window makeKeyAndVisible];

그건 한 번만 할 수 있어요.나중에 happyThing.view를 제거하고 대신 newThing.view를 넣으려고 하면 작동하지 않습니다. 그게 바로 그 것입니다.기계는 뷰를 가로 방향으로 회전하지 않습니다.트릭 수정은 없으며 Apple조차도 이를 작동시킬 수 없습니다.채택해야 할 해결 방법은 단순히 거기에 앉아서 다양한 뷰(happyThing, newThing 등)를 보유하는 전체 UIViewController를 갖는 것입니다.도움이 되길 바랍니다!

다른 팁

Apple 개발자 사이트에서:

상태 표시 줄이 적절한 위치에 있도록 조경 모드에서 응용 프로그램을 시작하려면 info.plist 파일을 편집하여 Listing 2에 표시된 것처럼 Uiinterfaceientationlandscaperight 또는 UiinterfaceorientationsCaperight 또는 UiinterfaceorientationlandScaperight 또는 Uiinterfaceorientationlandscaperight 또는 Uiinterfaceorientationlandscaperight 또는 Uiinterfaceorientation 키를 추가하십시오.

목록 2:조경 모드에서 응용 프로그램을 시작합니다

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>

직접 테스트한 후 모든 게시물의 요약 및 통합아래에서 4.x, 5.x에 대한 업데이트를 확인하세요.

3.2부터는 코드에서 실행 중인 애플리케이션의 방향을 변경할 수 없습니다.

그러나 고정된 방향으로 애플리케이션을 시작할 수 있지만 그렇게 하는 것이 쉽지는 않습니다.

다음 레시피를 사용해 보세요.

  1. 방향을 다음으로 설정하세요 UISupportedInterfaceOrientations 에서 Info.plist 파일
  2. 창에서 480x320 "기본 뷰 컨트롤러"를 정의하십시오.다른 모든 보기는 해당 보기에 하위 보기로 추가됩니다.
  3. 모든 뷰 컨트롤러에서 shouldAutorotateToInterfaceOrientation: 메소드(물론 plist에 정의한 것과 동일한 값을 반환하기 위해)
  4. 모든 뷰 컨트롤러에서 배경 뷰를 설정합니다.

    self.view.frame = CGRectMake(0, 0, 480, 320)

    에서 viewDidLoad 방법.

업데이트(iOS 4.x, 5.x):Apple iOS 앱 프로그래밍 가이드의 "고급 앱 요령" 장에 "가로 모드로 실행" 단락이 있습니다.

참고자료:

먼저 info.plist에 설정했습니다.

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>

그런 다음 이 코드를 applicationDidFinishLaunching에 넣었습니다.

CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57079633);
[window setTransform:rotate];

CGRect contentRect = CGRectMake(0, 0, 480, 320); 
window.bounds = contentRect; 
[window setCenter:CGPointMake(160.0f, 240.0f)]; 

이렇게 하면 인터페이스 빌더의 뷰를 가로 모드로 작업할 수 있습니다.

sasb와 michaelpryor의 답변은 올바른 것 같지만 효과가 없다면 다음 대안을 시도해 보십시오.

- (void)applicationDidFinishLaunchingUIApplication *)application {
    application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
}

아니면 이거:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

아니면 이거:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

전화를 해야 할 수도 있습니다. window makeKeyAndVisible; 첫 번째.

몇 가지 링크: 가로 모드로 개발하기, 아이폰 SDK:가로 모드만 강제로 적용하는 방법은 무엇입니까?

@로버트:참고해주세요 iPhone SDK, NDA 및 스택 오버플로.

아직 아무도 이 대답을 내놓지 못했다는 사실에 놀랐습니다.

모든 테스트에서 모달 뷰 컨트롤러를 닫을 때 상위 뷰 컨트롤러의 기본 방향이 설정되었습니다. shouldAutorotateToInterfaceOrientation UINavigationController의 일부인 경우에도 존중됩니다.따라서 이에 대한 해결책은 간단합니다.

배경용 UIImageView를 사용하여 더미 UIViewController를 만듭니다.앱이 시작 시 사용하는 default.png 이미지로 이미지를 설정합니다.

언제 viewWillAppear 루트 뷰 컨트롤러에서 호출되면 애니메이션 없이 더미 뷰 컨트롤러만 표시하면 됩니다.

언제 viewDidAppear 더미 뷰 컨트롤러에서 호출되면 멋진 교차 디졸브 애니메이션으로 뷰 컨트롤러를 닫습니다.

이것은 효과가 있을 뿐만 아니라 보기에도 좋습니다!그런데, 설명을 위해 루트 뷰 컨트롤러의 작업을 수행합니다. viewWillAppear 이와 같이:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}

최신 iPhone OS 프로그래밍 가이드에는 샘플 코드와 함께 이에 대한 전체 섹션이 있습니다.최근에 추가된 내용이므로 놓쳤을 수도 있습니다.준수해야 할 모든 조건을 설명합니다.원래...

  • Info.plist 속성 설정(상태 표시줄의 위치는 변경되지만 보기는 변경되지 않음)
  • UIViewController viewDidLoad 중 하나에서 중심을 중심으로 뷰를 수동으로 회전합니다.메소드 또는 귀하의 applicationDidFinishLaunching:방법 또는 자동 회전 구현("자동 크기 조정 동작", 페이지 124)

"가로 모드로 실행", 페이지 102을 참조하십시오.

이 답변을 참조하세요: iPhone 또는 iPad 전용 가로 모드

  1. plist에 방향 추가
  2. shouldAutorotateToInterfaceOrientation = 모든 파일에서 YES

혼합 모드를 사용하는 경우 다음을 사용하는 것이 더 나을 수도 있습니다.

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top