如何在iOS 6中以编程方式获取设备的当前方向?

时间:2012-12-12 09:26:23

标签: iphone ios6 screen-orientation device-orientation ipad-3

我开发了iOS应用程序并在iOS6设备上进行了测试。在测试时,我意识到我的应用程序没有按预期响应方向更改。

这是我的代码:

// Autorotation (iOS >= 6.0)
- (BOOL) shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationMaskPortrait;
}

准确地说,我想知道iOS中的方向更改会调用哪些方法。

8 个答案:

答案 0 :(得分:53)

你可以尝试这个,可以帮助你:

How to change the device orientation programmatically in iOS 6

  

OR

<强>目标C:

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]

<强>夫特:

if UIDevice.current.orientation.isLandscape {
    // Landscape mode
} else {
    // Portrait mode
}

答案 1 :(得分:36)

你可以尝试这个,这可以解决你的问题。

UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

请参阅以下App extension链接 Get device current orientation (App Extension)

答案 2 :(得分:6)

也许很愚蠢,但它正在运行(仅在ViewController中):

if (self.view.frame.size.width > self.view.frame.size.height) {
    NSLog(@"Hello Landscape");
}

答案 3 :(得分:5)

  @property (nonatomic) UIDeviceOrientation m_CurrentOrientation ;

/ *您需要在ViewDidload或ViewWillAppear * /

中声明这些代码
- (void)viewDidLoad

   {

   [super viewDidLoad];

   [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

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

/ *现在我们的设备会在我们更改设备方向时发出通知,因此您可以使用当前方向控制代码或程序* /

- (void)deviceOrientationDidChange:(NSNotification *)notification

 {

 //Obtaining the current device orientation

 /* Where self.m_CurrentOrientation is member variable in my class of type UIDeviceOrientation */

 self.m_CurrentOrientation = [[UIDevice currentDevice] orientation];

    // Do your Code using the current Orienation 

 }

答案 4 :(得分:2)

按照UIDevice上的文档。

您需要致电

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

然后每次更改方向时,您将收到UIDeviceOrientationDidChangeNotification。

答案 5 :(得分:2)

This tutorial简要概述了如何使用UIDeviceOrientationDidChangeNotification处理设备轮换。它可以帮助您了解如何在设备方向更改时使用UIDeviceOrientationDidChangeNotification进行通知。

答案 6 :(得分:1)

UIDevice.current.orientation.isLandscape

接受的答案读取上述设备的方向,可以报告与视图控制器的方向不同,特别是如果您的设备保持在几乎水平的位置。

要明确了解视图控制器的方向,您可以使用其interfaceOrientation属性,该属性自iOS 8.0以来已弃用但仍能正确报告。

答案 7 :(得分:0)

在ViewController中,您可以使用didRotateFromInterfaceOrientation:方法检测设备何时旋转,然后在每个方向执行您需要的任何操作。

示例:

#pragma mark - Rotation

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    switch (orientation) {
        case 1:
        case 2:
            NSLog(@"portrait");
            // your code for portrait...
            break;

        case 3:
        case 4:
            NSLog(@"landscape");
            // your code for landscape...
            break;
        default:
            NSLog(@"other");
            // your code for face down or face up...
            break;
    }
}