참고 :이 질문은 2008 년 이후이며 현재는 역사적인 관심사입니다.가로 모드의 iPhone 앱, 2008 시스템
처음부터 가로 모드로 실행되는 iPhone 응용 프로그램을 만드는 가장 좋은 방법은 장치의 위치에 관계없이 무엇입니까?
프로그래밍 방식으로 및 인터페이스 작성기를 사용하여. 애플 개발자 사이트에서
참고 :이 질문은 2008 년 이후이며 현재는 역사적인 관심사입니다.가로 모드의 iPhone 앱, 2008 시스템
처음부터 가로 모드로 실행되는 iPhone 응용 프로그램을 만드는 가장 좋은 방법은 장치의 위치에 관계없이 무엇입니까?
프로그래밍 방식으로 및 인터페이스 작성기를 사용하여. 애플 개발자 사이트에서
이 답변은 현재 상당히 오래되었습니다.
이 게시물은 에만 역사적인 호기심입니다.
흥미로운 뉴스! 앤드류 (Andrew)가 발견 한 바와 같이이 문제는 4.0+에서 Apple에 의해 수정되었습니다.
모든보기에서보기의 크기를 강제하는 것이 더 이상 필요하지 않으며 "처음 만 작동하는"풍경의 심각한 심각한 문제가 해결 된 것으로 보입니다.
2011 년 4 월 현재 4.0 이하는 테스트하거나 빌드 할 수 없으므로이 질문은 전적으로 역사적인 호기심입니다. 얼마나 많은 문제로 인해 개발자가 그렇게 오래 걸렸는지 놀라운 것입니다!
여기에 원래의 토론과 해결책이 있습니다. 이 시스템은 작동하지 않기 때문에 이것은 현재 전혀 관련이 없습니다.
이 작업을 완전히 수행하는 것은 극히 어려움 - 적어도 3 가지 문제/버그가 있습니다.
이 시도 .. 특히 interface builder landscape design
참고가 을 말한다 "당신은 어디에서나 제대로 shouldAutorotateToInterfaceOrientation을 사용할 필요"가, 사방의 모든 전체 화면보기를 의미 곳.
희망이 악몽에 도움이 되길 바랍니다!
손을 여기에서 추가 잘 알려진 문제의 중요한 알림 : 한보기 (모든 풍경), 보다 더 사이에 교환하려는 경우 단순히을 작동하지 않습니다. 이것을 기억하는 것이 중요합니다. 그렇지 않으면 문제가 발생한 날을 낭비하게됩니다. 그것은 문자 그대로 가능하지 않습니다. 그것은 iOS 플랫폼에서 가장 큰 공개 된 알려진 버그입니다. 문자 그대로 하드웨어가 두 번째보기를로드 할 수있는 방법이 없습니다. 짜증나지만 간단한 해결 방법, 그리고 당신이해야 할 일은 아무것도하지 않고 거기에 앉아서 자신의 견해를 바꿀 수있는 사소한 마스터 UIViewController입니다. 아이폰 OS에 있기 때문에 주요 알고 버그 즉
:[window addSubview:happyThing.view];
[window makeKeyAndVisible];
당신은 한 번만을 할 수 있습니다. 나중에 happyThing.view를 제거하려고 시도하고 대신 newThing.view를 넣으면 IT가 작동하지 않으며 그 것입니다.컴퓨터는보기를 가로 방향으로 회전시키지 않습니다. 아무 트릭 픽스도 없으며, 심지어 애플은 그것을 작동시킬 수 없다. 당신이 채택해야하는 해결 방법은 거기에 앉아서 다양한 뷰 (happyThing, newThing 등)를 보유하는 전체적인 UIViewController를 갖는 것입니다. 희망이 도움이됩니다!
4.x에서 수정되었습니다. 우리는 여러 화면, 풍경 및 일부 초상화가있는 게임을 출하했으며 3.x에서는 작동하지 않았습니다. 그것을 처리하기 위해 여분의 더미 뷰에 들어가기를 원하지 않고 대신에 4.x가 필요합니다.이 질문 이후 1 년은 아마도 괜찮습니다. – AndrewS
우리는 "항상 풍경"이 아니라 다양한 풍경이나 초상화를 사용했습니다. 각 VC는 창에 직접 추가되거나 창에서 제거됩니다. 앱이 화면을 시작하여 여러 화면 전환을 통해 그 상태를 유지합니다. 더미 뷰는 사용하지 않지만 모든 화면에서 shouldAutorotate를 재정의합니다. 터치 패드에서 폰으로의 4.x에는 아무런 문제가 없습니다. – AndrewS
:
상태 표시 줄 바로 적절한 위치에 있도록, 풍경 모드에서 응용 프로그램을 시작 UIInterfaceOrientation 키를 추가 당신의 Info.plist 파일을 편집하려면 적절한 값 (UIInterfaceOrientationLandscapeRight 또는 UIInterfaceOrientationLandscapeLeft) 으로 목록에 나타낸 바와 같이 2
,745,목록 2 : 가로 모드에서 응용 프로그램 시작
<key>UIInterfaceOrientation</key> <string>UIInterfaceOrientationLandscapeRight</string>
당신의 shouldAutorotateToInterfaceOrientation 메소드에서이 더하기는 return (interfaceOrientation! = UIInterfaceOrientationPortrait); 너 끝났어. – mbehan
질문은 가로 모드에서 장치를 시작하는 방법을 묻습니다. 대답은 그 정보를 제공합니다. 그 후 오리엔테이션을 다루는 것은 질문에서 언급되지 않았다. +1 Michael Pryor –
흥미롭게도 "답변"은 실제로 가로 모드에서 장치를 시작하지 않습니다. - !! 그것은 아마도 모든 Apple 환경에서 가장 유명한 버그/어려움 일 것입니다. 그것은 매우 일하는 iPad 개발자를위한 기본입니다! – Fattie
sasb 년대와 michaelpryor의 대답은 올바른 것으로 보인다,하지만 당신을 위해 작동하지 않는 경우,이 대안 시도 :
- (void)applicationDidFinishLaunchingUIApplication *)application {
application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
}
또는 이 하나 :
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
또는이 하나 :
[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];
먼저 window makeKeyAndVisible;
으로 전화해야 할 수도 있습니다.
몇 가지 링크
: Developing in landscape mode, iPhone SDK: How to force Landscape mode only?@Robert : The iPhone SDK, NDA, and Stack Overflow를 참조하십시오.
최신 iPhone OS 프로그래밍 가이드에는 샘플 코드가 포함되어 있습니다. 나는 이것이 최근 추가 된 것이라고 확신합니다. 아마도 당신이 그것을 놓쳤을 것입니다. 당신이 준수해야하는 모든 조건을 설명합니다; 기본적으로 ...
봐, 102 페이지
먼저 나는 정보에서 설정합니다.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)];
내가 가로 모드에서 인터페이스 빌더에서 뷰에서 작업 할 수 있습니다이 방법.
모든 게시물의 요약 및 통합, 직접 테스트 한 후; 아래의 4.x, 5.x에 대한 업데이트를 확인하십시오.
3.2부터는 실행중인 응용 프로그램의 방향을 코드에서 변경할 수 없습니다.
그러나 고정 된 방향으로 애플리케이션을 시작할 수는 있지만 그렇게하는 것은 쉽지 않습니다.
이 레시피 시도 :Info.plist
파일UISupportedInterfaceOrientations
로 방향을 설정합니다. 다른 모든보기는 해당보기의 하위보기로 추가됩니다. shouldAutorotateToInterfaceOrientation:
방법을 설정하는 모든 뷰 컨트롤러에서self.view.frame = CGRectMake(0, 0, 480, 320)
에서와 배경보기 설정된 모든 뷰 컨트롤러에서
(물론, 당신이 PLIST에 정의 된 동일한 값을 반환) viewDidLoad
방법.
업데이트 (아이폰 OS 4.x의 경우, 5.x를) : 애플 iOS 앱 프로그래밍 가이드는 "고급 앱 트릭"장에서 "가로 모드에서 시작"단락을 가지고있다.
참고 :
이것이 진정한 의미의 유일한 해결책이라는 것을 확인할 수 있습니다. 이것을 찾아서 평가하는 데 몇 시간이 걸렸습니다. 다른 모든 대답은 문제의 부분적인 해결책 일뿐입니다. –
나는 SO 질문에 대한 링크가이 질문으로 어떻게 연결되는지를 좋아합니다. –
Ty Richard, 루핑 링크 제거됨 – IlDan
나는 아직 아무도이 대답을 마련하지 않았다 놀랐어요하십시오 모달을 기각 할 때 내 모든 테스트에서
보기 컨트롤러 부모보기 컨트롤러의 기본 설정 방향 shouldAutorotateToInterfaceOrientation
에 설정된 경우에도 UINavi의 일부 gationController. 그래서 이것에 대한 해결책은 간단합니다 :
배경에 대한 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;
}
...
}
이 대답을 참조하십시오 : 모든 파일에 YES = Landscape Mode ONLY for iPhone or iPad
혼합 모드를 사용하는 경우 더 편리 할 수도 있지만
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
미래의 독자를 위해 **이 유명한 문제 **가 2011 년 현재 Apple **에 의해 해결되었습니다. 아래의 답변에서 테스트 프로젝트에 유의하십시오. – Fattie