iPhone 방향을 설정하는 문서화 된 방법이 있습니까?


94

특정보기에서 장치 회전을 지원하고 싶지만 다른보기는 가로 모드에서 특히 의미가없는 앱이 있으므로보기를 교체 할 때 강제로 회전을 세로로 설정하고 싶습니다.

트릭을 수행하지만 분명히 컴파일러 경고를 생성하고 SDK의 향후 개정판에서 사라질 수있는 문서화되지 않은 속성 설정자가 UIDevice에 있습니다.

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait];

방향을 강제하는 문서화 된 방법이 있습니까?

업데이트 : 나는 이미 구현했기 때문에 shouldAutorotateToInterfaceOrientation을 찾고 있지 않기 때문에 예제를 제공 할 것이라고 생각했습니다.

내 앱이 View 1에서는 가로 및 세로를 지원하고 View 2에서는 세로 만 지원하고 싶습니다. 모든보기에 대해 shouldAutorotateToInterfaceOrientation을 이미 구현했지만 사용자가 View 1에서 가로 모드에있는 경우 View 2로 전환하면 다시 세로로 회전합니다.


11
나는 이것에 대한 버그를 제출했는데, 애플이 위의 API를 노출하거나, 전화가 회전 할 때뿐만 아니라 뷰가 처음로드 될 때 shouldRotate 메서드에서 반환되는 YES, NO를 존중할 것을 제안했습니다.
rustyshelf

2
나는 setOrientation이 노출되도록 요청하는 버그를 제출했습니다
Jessedc

1
[[UIDevice currentDevice] setOrientation : UIInterfaceOrientationPortrait]; 이 메서드는 더 이상 사용되지 않으며 더 이상 존재하지 않습니다.
Hikmat Khan

답변:


6

이것은 최신 iPhone 3.1.2 SDK에서 더 이상 문제가되지 않습니다. 이제 스택으로 다시 푸시되는 뷰의 요청 된 방향을 따르는 것으로 보입니다. 이는 이전 iPhone OS 버전을 감지하고 최신 릴리스 이전 인 경우에만 setOrientation을 적용해야 함을 의미합니다.

Apple의 정적 분석이 이전 SDK 제한 사항을 해결하고 있음을 이해하는지 여부는 명확하지 않습니다. 개인적으로 Apple은 다음 업데이트에서 메서드 호출을 제거하라는 지시를 받았으므로 이전 장치에 대한 해킹이 승인 프로세스를 통과할지 아직 확실하지 않습니다.


iPhone Simulator 3.3.2의 경우가 아닙니다. 여전히 작동하지 않습니다.
Duck

4
@user 스택에서 뷰를 푸시 할 때 방향을 어떻게 요청합니까?
progrmr 2010-06-21

4
Apple의 정적 분석을 우회 할 수 있습니다. performSelector를 사용하고 Obj-C의 놀라운 역동성에 의존하여 문서화되지 않은 코드를 성공적으로 사용했습니다.
Kenneth Ballenegger 2010

@KennethBallenegger 그런 내용을 숨기면 앱이 삭제되고 계정이 삭제 될 수도 있다는 지침 및 / 또는 동의 내용을 읽은 기억이 있습니다. 문서화되지 않은 API를 사용하기 위해 위험을 감수하지는 않습니다.
Ivan Vučica 2011

101

이것은 사실이 있은 지 오래되었지만 탐색 컨트롤러를 사용하지 않거나 문서화되지 않은 방법을 사용하고 싶지 않은 사람이 올 경우를 대비하여 :

UIViewController *c = [[UIViewController alloc]init];
[self presentModalViewController:c animated:NO];
[self dismissModalViewControllerAnimated:NO];
[c release];

바닐라 뷰 컨트롤러를 표시하고 해제하는 것으로 충분합니다.

분명히 shouldAutorotateToInterfaceOrientation 재정의에서 방향을 확인하거나 거부해야합니다. 그러나 이로 인해 시스템에서 shouldAutorotate ...를 다시 호출합니다.


1
훌륭합니다, 이것은이 게시물의 정답으로 표시되지 않았지만 이것은 내 문제의 절반을 해결했습니다 . stackoverflow.com/questions/5030315 . 모델 뷰 트릭은 세로 방향을 '강제'합니다. 가로 방향을 강제하는 것도 알고 있습니까?
epologee

5
하하 !! 이건 너무 멍청 해! 하지만 작동합니다! -물론 그렇습니다! : D
hfossli 2011-09-07

굉장합니다, 오랫동안 이것으로 고생했습니다. 감사! 짝
라훌 Choudhary에게

3
이것은 iOS5 및 iOS6 모두에서 작동하는 것 같습니다. [self presentViewController : [UIViewController new] animated : NO 완료 : ^ {[self dismissViewControllerAnimated : NO 완료 : nil]; }];
Inferis 2012

1
이것은 iOS 7 및 iOS 8에서 작동하는 것처럼 보이지만 눈에 띄는 검은 색 화면이 보입니다 (주로 iOS 8).
levigroker

16

세로에서 가로로 강제로 회전 시키려면 여기에 코드가 있습니다. 뷰의 중심을 조정해야합니다. 내 것이 올바른 위치에 뷰를 배치하지 않았다는 것을 알았습니다. 그렇지 않으면 완벽하게 작동했습니다. 팁 고마워.

if(UIInterfaceOrientationIsLandscape(self.interfaceOrientation)){

        [UIView beginAnimations:@"View Flip" context:nil];
        [UIView setAnimationDuration:0.5f];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
        self.view.bounds = CGRectMake(0.0f, 0.0f, 480.0f, 320.0f);
        self.view.center = CGPointMake(160.0f, 240.0f);

        [UIView commitAnimations];
}

UIAlertView를 추가해도 작동합니까? 나는 시도 CGAffineTransformMakeRotation뷰 GET 회전하지만 UIAlertView 여전히 상태 표시 줄 방향 즉, -degreeToRadian (각도)에 따라? 이와 같은 것을 얻었습니까?
NeverHopeless 2014

를 사용하여이 작업을 수행하는 가장 쉬운 방법 UIAlertView은 뷰 컨트롤러를 alertView의 델리게이트로 설정 한 다음 : - (void) didPresentAlertView:(UIAlertView *) alertView에서 현재를 기준으로 회전을 수행하는 것 [UIApplication sharedApplication].statusBarOrientation입니다. 애니메이션을 적용하지 않으면 너무 이상해 보이지 않아야합니다.
Michael Gaylord 2014

16

내가 알 수 있듯이 setOrientation:방법이 작동하지 않거나 더 이상 작동하지 않습니다. 이 작업을 수행하기 위해 수행하는 작업은 다음과 같습니다.

먼저 #imports 바로 아래의 파일 맨 위에이 정의를 넣으십시오.

#define degreesToRadian(x) (M_PI * (x) / 180.0)

그런 다음 viewWillAppear:방법에서

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];     
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {  
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}

애니메이션을 원하면 다음과 같이 애니메이션 블록에 전체를 래핑 할 수 있습니다.

[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];     
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {  
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}
[UIView commitAnimations];

그런 다음 세로 모드 컨트롤러에서 반대로 할 수 있습니다. 현재 가로 모드인지 확인하고, 그렇다면 다시 세로 모드로 회전합니다.


1
self.view 대신 self.window.view를 회전해야합니다. 뷰 위에 UITabBar 또는 다른 컨트롤러가있는 경우 편리합니다.
Borut Tomazin

7

UIViewController화면 UINavigationController에 가로 방향으로 표시 되는 문제가 발생했습니다 . 그러나 다음 뷰 컨트롤러가 흐름에서 밀려 나면 장치가 세로 방향으로 돌아 가야했습니다.

내가 주목 shouldAutorotateToInterfaceOrientation:한 것은 새 뷰 컨트롤러가 스택에 푸시 될 때 메서드가 호출되지 않고 뷰 컨트롤러가 스택에서 팝될 때 호출된다는 것입니다 .

이를 활용하여 내 앱 중 하나에서이 코드 스 니펫을 사용하고 있습니다.

- (void)selectHostingAtIndex:(int)hostingIndex {

    self.transitioning = YES;

    UIViewController *garbageController = [[[UIViewController alloc] init] autorelease];
    [self.navigationController pushViewController:garbageController animated:NO];
    [self.navigationController popViewControllerAnimated:NO];

    BBHostingController *hostingController = [[BBHostingController alloc] init];
    hostingController.hosting = [self.hostings objectAtIndex:hostingIndex];
    [self.navigationController pushViewController:hostingController animated:YES];
    [hostingController release];

    self.transitioning = NO;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    if (self.transitioning)
        return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
    else
        return YES;
}

기본적으로 빈 뷰 컨트롤러를 만들고 스택에 밀어 넣은 다음 즉시 튀어 나옴으로써 인터페이스를 세로 위치로 되돌릴 수 있습니다. 컨트롤러가 튀어 나오면 처음부터 밀려 고했던 컨트롤러를 누르기 만하면됩니다. 시각적으로보기 좋습니다. 비어있는 임의의 뷰 컨트롤러는 사용자가 볼 수 없습니다.


안녕하세요, 저는 VC를 푸시하기 전에 올바른 방향으로 강제하는 방법을 구현했지만 세로 방향을 강제 할 때만 작동한다는 것을 발견했습니다 (현재보기가 세로이고 다음보기를 가로로 강제하려는 경우에는 이겼습니다). shouldAutorotateToInterfaceOrientation : popping을 호출하지 마십시오.) 뷰를 Landscape로 강제하는 해결 방법을 찾았습니까?
Rafael Nobre

흥미 롭습니다. 죄송합니다. 나는 밀기와 팝의 순서를 가지고 놀아 볼 것이다. 당신이 무언가를 생각 해낼 수있는 적절한 기회가있다.
Andrew Vilcsak 2010

7

kdbdallas , Josh 가 이미 제공 한 답변 중 두 가지를 사용하여 프로그래밍 방식으로 iPhone을 필요한 방향으로 강제하는 간단한 방법이 있습니다 .

//will rotate status bar
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];


//will re-rotate view according to statusbar
UIViewController *c = [[UIViewController alloc]init];
[self presentModalViewController:c animated:NO];
[self dismissModalViewControllerAnimated:NO];
[c release];

매력처럼 작동 :)

편집하다:

iOS 6의 경우이 기능을 추가해야합니다. (모달 뷰 컨트롤러에서 작동)

- (NSUInteger)supportedInterfaceOrientations
{
    return (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight);
}

나에게는 매력적으로 작동하지 않습니다. 탐색 모음과 도구 모음이 가로보기에서 가질 수있는 높이로 축소됩니다. 제거 최상위 뷰를 재 - 추가하는 방법은 정확한 높이를 유지하지만 역시 단점이있다 : 내 탐색 메뉴 이동을 약간 아래로 (thetering 막대를 사용하는 경우로서 같은)
AlexWien

그것은 모달 및 푸시 뷰 컨트롤러 모두에서 내 쪽에서 작동합니다. 하지만 :( 아이폰 OS 5.
Guntis Treulands

예, ios5에서도 작동합니다. 이제 iOS6의에서 탐색 모음 정신과의 높이가 모달 가로보기 컨트롤러가 기각되면
AlexWien

7

나는 이것에 대한 좋은 해결책을 찾기 위해 파고 파고있었습니다. 트릭을 수행하는이 블로그 게시물을 찾았습니다. 키에서 가장 바깥 쪽 뷰를 제거 UIWindow하고 다시 추가하면 시스템이 뷰 shouldAutorotateToInterfaceOrientation:컨트롤러 에서 메서드 를 다시 쿼리 하여 올바른 방향이 적용되도록 강제합니다. 그것을보십시오 : 아이폰은 uiview가 방향을 바꾸도록 강제 합니다.


이 솔루션은 저에게 가장 적합했습니다. 중요한 것은, 빈 modalViewController를 표시하는 수정으로 인해 뷰 컨트롤러를 스택에 푸시하는 잘못된 애니메이션이 발생합니다. 이 UIWindow 메서드는 동일한 문제를 겪지 않습니다.
Rik Smith-Unna 2012 년

5

Josh의 대답이 잘 작동합니다.

그러나 "방향이 변경되었습니다 . UI를 업데이트하십시오" 알림을 게시하는 것을 선호합니다 . 이 알림이 뷰 컨트롤러에 수신되면를 호출 shouldAutorotateToInterfaceOrientation:하여 원하는 방향으로 돌아가서 방향을 설정할 수 있습니다 YES.

[[NSNotificationCenter defaultCenter] postNotificationName:UIDeviceOrientationDidChangeNotification object:nil];

유일한 문제는 애니메이션 없이 방향 다시 지정해야한다는 것 입니다. 당신이 줄을 포장 할 필요가 사이 beginAnimations:commitAnimations 원활한 전환을 달성 할 수 있습니다.

도움이 되었기를 바랍니다.


3

FWIW, 여기에 수동으로 방향을 설정하는 구현이 있습니다 (앱의 루트 뷰 컨트롤러, natch로 이동).

-(void)rotateInterfaceToOrientation:(UIDeviceOrientation)orientation{

    CGRect bounds = [[ UIScreen mainScreen ] bounds ];
    CGAffineTransform t;
    CGFloat r = 0;
    switch ( orientation ) {
        case UIDeviceOrientationLandscapeRight:
            r = -(M_PI / 2);
            break;
        case UIDeviceOrientationLandscapeLeft:
            r  = M_PI / 2;
            break;
    }
    if( r != 0 ){
        CGSize sz = bounds.size;
        bounds.size.width = sz.height;
        bounds.size.height = sz.width;
    }
    t = CGAffineTransformMakeRotation( r );

    UIApplication *application = [ UIApplication sharedApplication ];

    [ UIView beginAnimations:@"InterfaceOrientation" context: nil ];
    [ UIView setAnimationDuration: [ application statusBarOrientationAnimationDuration ] ];
    self.view.transform = t;
    self.view.bounds = bounds;
    [ UIView commitAnimations ];

    [ application setStatusBarOrientation: orientation animated: YES ];     
}

다음 UINavigationControllerDelegate방법 과 결합됩니다 (를 사용한다고 가정 UINavigationController).

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    // rotate interface, if we need to
    UIDeviceOrientation orientation = [[ UIDevice currentDevice ] orientation ];
    BOOL bViewControllerDoesSupportCurrentOrientation = [ viewController shouldAutorotateToInterfaceOrientation: orientation ];
    if( !bViewControllerDoesSupportCurrentOrientation ){
        [ self rotateInterfaceToOrientation: UIDeviceOrientationPortrait ];
    }
}

수신 UIViewController이 현재 장치 방향을 지원 하는지 여부에 따라 루트 뷰를 회전합니다 . 마지막으로 rotateInterfaceToOrientation표준 iOS 기능을 모방하기 위해 실제 장치 방향 변경에 연결하는 것이 좋습니다. 이 이벤트 핸들러를 동일한 루트 뷰 컨트롤러에 추가합니다.

-(void)onUIDeviceOrientationDidChangeNotification:(NSNotification*)notification{
    UIViewController *tvc = self.rootNavigationController.topViewController;
    UIDeviceOrientation orientation = [[ UIDevice currentDevice ] orientation ];
    // only switch if we need to (seem to get multiple notifications on device)
    if( orientation != [[ UIApplication sharedApplication ] statusBarOrientation ] ){
        if( [ tvc shouldAutorotateToInterfaceOrientation: orientation ] ){
            [ self rotateInterfaceToOrientation: orientation ];
        }
    }
}

마지막으로, 등록 UIDeviceOrientationDidChangeNotification의 통지 init또는 loadview과 같이 :

[[ NSNotificationCenter defaultCenter ] addObserver: self
                                           selector: @selector(onUIDeviceOrientationDidChangeNotification:)
                                               name: UIDeviceOrientationDidChangeNotification
                                             object: nil ];
[[ UIDevice currentDevice ] beginGeneratingDeviceOrientationNotifications ];

이 페이지에서 내 탐색 컨트롤러 코드에 성공적으로 적응할 수 있었던 유일한 답변입니다. 한 가지 사소한 문제는 회전 된 내비게이션 바가 일반 메커니즘을 통해 회전하는 경우처럼 세로 및 가로 방향 사이에서 높이를 변경하지 않는다는 것입니다.
Dan Dyer

@ DanDyer 탐색 막대의 높이가 잘못되어 문제를 해결 했습니까? (특히 ios6에서는 높이가 잘못되었습니다)
AlexWien 2013-07-13

@AlexWien 나는 결국 우리가 이것을하지 말아야한다고 클라이언트를 설득했다. iOS 6의 경우 새로운 shouldAutorotate방법 으로 작업을 수행해야 할 수 있습니다 ( stackoverflow.com/a/12586002/5171 참조 ).
Dan Dyer

@DanDyer가 어제 해결했고 ViewDidAppear의 탐색 및 statusBar의 간단한 숨기기 및 표시로 해결되었습니다. 이제 모든 작업 (SDK ios6, target ios5) 대상 ios6으로 다시 테스트해야합니다
AlexWien

2

이것은 나를 위해 작동합니다 (Henry Cooke에게 감사드립니다).

저의 목표는 가로 방향 변경 만 처리하는 것이 었습니다.

초기화 방법 :

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(orientationChanged:)
                                             name:UIDeviceOrientationDidChangeNotification
                                           object:nil];

- (void)orientationChanged:(NSNotification *)notification {    
    //[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
    CGRect bounds = [[ UIScreen mainScreen ] bounds ];
    CGAffineTransform t;
    CGFloat r = 0;
    switch ( orientation ) {
        case UIDeviceOrientationLandscapeRight:
            r = 0;
            NSLog(@"Right");
            break;
        case UIDeviceOrientationLandscapeLeft:
            r  = M_PI;
            NSLog(@"Left");
            break;
        default:return;
    }

    t = CGAffineTransformMakeRotation( r );

    UIApplication *application = [ UIApplication sharedApplication ];
    [ UIView beginAnimations:@"InterfaceOrientation" context: nil ];
    [ UIView setAnimationDuration: [ application statusBarOrientationAnimationDuration ] ];
    self.view.transform = t;
    self.view.bounds = bounds;
    [ UIView commitAnimations ];

    [ application setStatusBarOrientation: orientation animated: YES ];
}

1

특정보기에서 장치 회전을 지원하고 싶지만 다른보기는 가로 모드에서 특히 의미가없는 앱이 있으므로보기를 교체 할 때 강제로 회전을 세로로 설정하고 싶습니다.

이 스레드의 위의 원래 게시물이 지금은 매우 오래되었다는 것을 알고 있지만 비슷한 문제가있었습니다. 내 앱의 모든 화면은 사용자가 가로와 세로로 회전 할 수있는 한 화면을 제외하고는 세로 전용입니다.

이것은 충분히 간단했지만 다른 게시물과 마찬가지로 이전 화면으로 돌아갈 때 현재 장치 방향에 관계없이 앱이 자동으로 세로로 돌아 가기를 원했습니다.

내가 구현 한 솔루션은 가로 모드에서 탐색 표시 줄을 숨기는 것이 었는데, 이는 사용자가 세로 모드에서 이전 화면으로 만 돌아갈 수 있음을 의미합니다. 따라서 다른 모든 화면은 세로로만 표시 될 수 있습니다.

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)pInterfaceOrientation {
    BOOL lHideNavBar = self.interfaceOrientation == UIInterfaceOrientationPortrait ? NO : YES;
    [self.navigationController setNavigationBarHidden:lHideNavBar animated:YES];
}

이것은 또한 가로 모드에서 더 많은 화면 공간을 사용할 수 있다는 점에서 내 앱에 추가 이점이 있습니다. 문제의 화면이 PDF 파일을 표시하는 데 사용되기 때문에 유용합니다.

도움이 되었기를 바랍니다.


1

나는 결국 이것을 아주 쉽게 해결했다. 위의 모든 제안을 시도했지만 여전히 짧았으므로 이것이 내 해결책이었습니다.

가로 (왼쪽 또는 오른쪽)를 유지해야하는 ViewController에서 방향 변경을 수신합니다.

    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(didRotate:)
                                             name:UIDeviceOrientationDidChangeNotification object:nil];

그런 다음 didRotate에서 :

- (void) didRotate:(NSNotification *)notification
{   if (orientationa == UIDeviceOrientationPortrait) 
    {
        if (hasRotated == NO) 
        {
            NSLog(@"Rotating to portait");
            hasRotated = YES;
            [UIView beginAnimations: @"" context:nil];
            [UIView setAnimationDuration: 0];
            self.view.transform = CGAffineTransformIdentity;
            self.view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(-90));
            self.view.bounds = CGRectMake(0.0f, 0.0f, 480.0f, 320.0f);
            self.view.frame = CGRectMake(0.0f, 0.0f, 480.0f, 320.0f);
            [UIView commitAnimations];

    }
}
else if (UIDeviceOrientationIsLandscape( orientationa))
{
    if (hasRotated) 
    {
        NSLog(@"Rotating to lands");
        hasRotated = NO;
        [UIView beginAnimations: @"" context:nil];
        [UIView setAnimationDuration: 0];
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(0));
        self.view.bounds = CGRectMake(0.0f, 0.0f, 320.0f, 480.0f);
        self.view.frame = CGRectMake(0.0f, 0.0f, 320.0f, 480.0f);
        [UIView commitAnimations];

    }
}

view.bounds / frame이 명시 적으로 재설정되므로 자동 크기 조정을 사용하는 Super Views / Subview를 염두에 두십시오.

뷰 랜드 스케이프를 유지하는이 방법에 대한 유일한주의 사항은 변경이없는 것처럼 보이게하는 것이 더 좋을 때 발생해야하는 방향간에 고유 한 애니메이션 전환이 있다는 것입니다.


1

iOS 6 솔루션 :

[[[self window] rootViewController] presentViewController:[[UIViewController alloc] init] animated:NO completion:^{
    [[[self window] rootViewController] dismissViewControllerAnimated:NO completion:nil];
}];

정확한 코드는 앱마다 다르며 배치 위치도 다릅니다 (AppDelegate에서 사용했습니다). 사용하는 것으로 교체하십시오 [[self window] rootViewController]. 나는 UITabBarController.


0

해결책을 찾았고 프랑스어로 무언가를 썼습니다 (하지만 코드는 영어로되어 있습니다). 여기

방법은 컨트롤러를 창보기에 추가하는 것입니다 (컨트롤러는 shouldRotate .... 함수를 잘 구현해야합니다).


-3

UIViewControllers를 사용하는 경우 다음 메서드가 있습니다.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

NO회전하지 않으려는 뷰를 포함하는 뷰 컨트롤러를 반환 합니다.

여기에 더 많은 정보


1
그것은 회전을 멈추고, 내가 찾고있는 것은 사용자가 가로 모드에 있으면 회전을 세로로 되 돌리는 것입니다. 위의 예를 추가하여 더 나은 것을 의미합니다.
Dave Verwer

-3

물론 UI에 90도 변환을 적용 할 수는 있지만 런타임에 이것이 가능하다고 생각하지 않습니다.


내가 원래 게시 한 코드로 가능합니다. 언제 작동이 멈출 지 알 수 없습니다.)
Dave Verwer

-3

이것이 내가 사용하는 것입니다. (컴파일 경고가 표시되지만 시뮬레이터와 iPhone 모두에서 작동합니다)

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

나는 이것이 4.1에서도 작동하기에 충분하다는 것을 알았습니다. 그러나 내 상태 표시 줄이 숨김으로 설정되어 있기 때문에 상단에 20 픽셀 간격이 생깁니다. (
Anthony Main

setOrientation은 비공개 API이며이를 사용하는 앱은 거부됩니다.
alones
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.