가로 모드의 iPhone 앱, 2008 시스템


98

이 질문은 2008 년의 질문이며 지금은 역사적인 관심사 일뿐입니다.


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

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


5
미래의 독자를 위해이 유명한 문제 2011 년 현재 Apple 에서 해결되었습니다 . 아래 답변에서 테스트 프로젝트를 참고하십시오.
Fattie

답변:


47

역사적인 대답 만. 매우 오래되었습니다.

이 답변은 이제 매우 오래되었습니다.

이 대답은 단지 역사적인 호기심 일뿐 입니다.


신나는 소식! 아래 Andrew가 발견 한 것처럼이 문제는 4.0 이상에서 Apple에 의해 수정되었습니다.

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

2011 년 4 월 현재 4.0 이하의 것은 테스트하거나 빌드 할 수 없으므로이 질문은 순전히 역사적인 호기심입니다. 오랫동안 개발자에게 얼마나 많은 문제를 일으켰는지 놀랍습니다!


여기에 원래의 토론과 해결책이 있습니다. 이러한 시스템은 작동하지 않기 때문에 지금은 전혀 관련이 없습니다.


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

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

특히 " 모든 곳에서 shouldAutorotateToInterfaceOrientation을 적절하게 사용해야합니다"라는 문구 는 모든 곳에서 모든 전체 화면보기를 의미합니다.

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

여기에 당면한 추가로 잘 알려진 문제에 대한 중요한 알림 : 하나 이상의 보기 (모든 가로) 간에 전환하려는 경우 간단하게 작동하지 않습니다 . 이것을 기억하는 것이 중요합니다. 그렇지 않으면 문제에 며칠을 낭비하게됩니다. 말 그대로 불가능합니다. iOS 플랫폼에서 가장 크고 알려진 버그입니다. 하드웨어가로드하는 두 번째보기를 가로로 만들 수있는 방법은 말 그대로 없습니다. 성가 시지만 간단한 해결 방법과 수행해야 할 작업은 아무것도하지 않고 뷰간에 전환 할 수있는 간단한 마스터 UIViewController를 사용하는 것입니다.

즉, iOS에서 주요 버그로 인해 :

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

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


2
나는 이것이 4.x에서 수정되었다고 생각합니다. 우리는 다양한 화면, 약간의 풍경, 약간의 초상화가있는 게임을 출시했지만 3.x에서는 작동하지 않았습니다. 이를 처리하기 위해 추가 더미 뷰에 들어가고 싶지 않고 대신 4.x가 필요했습니다.이 질문을받은 후 1 년이 지나면 괜찮을 것입니다.
AndrewS 2011-04-24

우리는 "항상 풍경"을하지 않고 오히려 다양한 풍경이나 초상화를합니다. 각 VC는 창에서 직접 추가 및 제거됩니다. 앱은 가로 모드를 실행하고 여러 화면 전환을 통해 그대로 유지됩니다. 우리는 더미 뷰를 사용하지 않지만 모든 화면에서 shouldAutorotate를 재정의합니다. 4.x에서는 터치에서 패드, 전화까지 문제가 없습니다.
AndrewS 2011-04-27

41

Apple Dev 사이트에서 :

애플리케이션을 가로 모드에서 시작하여 상태 표시 줄이 즉시 적절한 위치에 있도록하려면 Info.plist 파일을 편집하여 적절한 값 (UIInterfaceOrientationLandscapeRight 또는 UIInterfaceOrientationLandscapeLeft)을 가진 UIInterfaceOrientation 키를 추가합니다 (Listing 2 참조).

목록 2 : 가로 모드에서 애플리케이션 시작

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

5
이 플러스 shouldAutorotateToInterfaceOrientation 메서드에서 반환 (interfaceOrientation! = UIInterfaceOrientationPortrait); 그리고 당신은 끝났습니다.
Michael Behan

5
질문은 가로 모드에서 장치를 시작하는 방법을 묻습니다. 대답은 그 정보를 제공합니다. 그 이후의 취급 방향은 질문에 언급되지 않았습니다. +1 Michael Pryor
ingh.am

1
흥미롭게도 "답변"은 실제로 가로 모드에서 장치를 시작하지 않습니다-!! 아마도 모든 Apple 환경에서 가장 유명한 버그 / 어려움 일 것입니다. 매우 일하는 iPad 개발자에게는 기본입니다!
Fattie

@mbehan UIInterfaceOrientationPortraitUpsideDown도 있으므로 수정 사항이 아닙니다. 또한 .plist의 UIInterfaceOrientation은 3.1.3 및 이전 장치가 아닌 3.2 이상에서만 지원됩니다 (iPhone 2G가 해당 버전에서 멈춤).
Ivan Vučica 2011 년

28

직접 테스트 한 후 모든 게시물의 요약 및 통합 아래에서 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 앱 프로그래밍 가이드의 "고급 앱 트릭"장에 "가로 모드로 실행"단락이 있습니다.

참조 :


1
이것이 유일하고 진정으로 작동하는 솔루션이라는 것을 확인할 수 있습니다 (작은 추가 포함). 이것을 찾고 평가하는 데 몇 시간이 걸렸습니다. 다른 모든 답변은 문제에 대한 부분적인 해결책 일뿐입니다.
Johannes Rudolph

8

먼저 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)]; 

이렇게하면 가로 모드에서 Interface Builder의 뷰에서 작업 할 수 있습니다.


7

sasb 및 michaelpryor의 대답이 올바른 것처럼 보이지만 작동하지 않으면 다음 대안을 시도하십시오.

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

또는 이거 :

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

또는 이거 :

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

window makeKeyAndVisible;먼저 전화해야 할 수도 있습니다 .

몇 가지 링크 : 가로 모드에서 개발 , iPhone SDK : 가로 모드 만 강제하는 방법은 무엇입니까?

@Robert : iPhone SDK, NDA 및 Stack Overflow 를 참조하십시오 .


6

아직 아무도이 답변을 내놓지 않았다는 것에 놀랐습니다.

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

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

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

viewDidAppear당신의 더미 뷰 컨트롤러에서 호출되는, 애니메이션을 용해 멋진 크로스와 뷰 컨트롤러를 닫습니다.

이 작업을 수행 할뿐만 아니라보기에도 좋습니다! BTW, 설명을 위해 루트 뷰 컨트롤러를 다음 viewWillAppear과 같이 수행합니다.

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

5

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

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

102 페이지의 "가로 모드로 실행"을 찾습니다.


4

이 답변보기 : iPhone 또는 iPad 전용 가로 모드

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

혼합 모드를 사용하는 경우에는

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.