How to set device (UI) orientation programmatically?

后端 未结 10 1487
感情败类
感情败类 2020-11-30 01:14

Would like everything on the screen (UI) to be able to rotate from landscape left to right or vica versa.

How do I go about doing this? Is this private?

I

相关标签:
10条回答
  • 2020-11-30 01:58

    If you present a modal view controller which implements -shouldAutorotateToInterfaceOrientation: to only support one orientation, the whole interface will automatically be forced into it. I don't think there's a way to programmatically change orientation otherwise.

    0 讨论(0)
  • 2020-11-30 01:59

    This was addressed by: Guntis Treulands https://stackoverflow.com/a/10146270/894671

    //-----------------------------------
    // FORCE PORTRAIT CODE
    //-----------------------------------
    [[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationPortrait animated:NO];
    //present/dismiss viewcontroller in order to activate rotating.
    UIViewController *mVC = [[UIViewController alloc] init];
    [self presentModalViewController:mVC animated:NO];
    [self dismissModalViewControllerAnimated:NO];
    
    0 讨论(0)
  • 2020-11-30 02:01
    if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
            objc_msgSend([UIDevice currentDevice], @selector(setOrientation:),    UIInterfaceOrientationLandscapeLeft );
        }
    
    0 讨论(0)
  • 2020-11-30 02:10

    As suggested on a related thread shouldAutorotateToInterfaceOrientation is deprecated. Newer apps should leverage the following methods as described in Apple's UIViewController Class Reference until they themselves become deprecated:

    • shouldAutorotate,
    • preferredInterfaceOrientationForPresentation; and
    • attemptRotationToDeviceOrientation.

    From what I understand it's best to use different View Controllers for views which need to lock into (i.e. have a preferred) orientation mode which differs from the last.

    0 讨论(0)
提交回复
热议问题