当iphone设备方向朝上/朝下时,我可以判断它是风景还是肖像?

时间:2013-09-11 13:33:27

标签: ios uiviewcontroller uideviceorientation

我得到了这段代码,如果设备处于横向左/右或倒置,它会旋转并显示另一个视图控制器。但如果它朝上或面朝下,那么如何判断它是横向模式还是纵向?因为我只想面朝上或朝下并以横向模式旋转

    - (void)viewDidAppear:(BOOL)animated
    {
        UIDeviceOrientation orientation = [[UIDevice currentDevice]orientation];
        NSLog(@"orientation %d", orientation);
        if ((orientation == 2) || (orientation == 3) || (orientation == 4))
        {

            [self performSegueWithIdentifier:@"DisplayLandscapeView" sender:self];
            isShowingLandscapeView = YES;
    }
}

4 个答案:

答案 0 :(得分:11)

从iOS 8开始,不推荐使用interfaceOrientation属性。 和助手方法

UIDeviceOrientationIsPortrait(orientation)  
UIDeviceOrientationIsLandscape(orientation)  

也无济于事,因为当方向为.faceUp时,它们会返回false。

所以我结束了检查:

extension UIViewController {
    var isPortrait: Bool {
        let orientation = UIDevice.current.orientation
        switch orientation {
        case .portrait, .portraitUpsideDown:
            return true
        case .landscapeLeft, .landscapeRight:
            return false
        default: // unknown or faceUp or faceDown
            guard let window = self.view.window else { return false }
            return window.frame.size.width < window.frame.size.height
        }
    }
}

这是在UIViewController扩展中,所以如果其他一切都失败,我可以恢复比较屏幕宽度和高度。

我使用window因为如果当前的ViewController嵌入在容器中,它可能无法反映全球iPad的方向。

答案 1 :(得分:7)

在UI代码中,您通常不应该依赖于设备方向,而是用户界面方向。它们之间通常存在差异,例如,当视图控制器仅支持纵向时。

对于您的情况,最重要的区别是界面方向永远不会面朝上/朝下。

在您的情况下,您可以向视图控制器询问当前用户界面方向:self.interfaceOrientation

您的情况可能有点像if (deviceOrientation is face up/down and interfaceOrientation is landscape)

请记住,设备方向横向左侧意味着用户界面方向正确。

答案 2 :(得分:3)

是的,UIDeviceOrientation是一个包含以下内容的枚举:

 UIDeviceOrientationUnknown,
 UIDeviceOrientationPortrait,          
 UIDeviceOrientationPortraitUpsideDown,
 UIDeviceOrientationLandscapeLeft,     
 UIDeviceOrientationLandscapeRight,    
 UIDeviceOrientationFaceUp,            
 UIDeviceOrientationFaceDown    

甚至还有两位助手:

UIDeviceOrientationIsPortrait(orientation)  
UIDeviceOrientationIsLandscape(orientation) 

{cm}在UIDeviceOrientation上显示枚举声明的头文件。

答案 3 :(得分:3)

有一种方法可以检查它。

UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation];
UIInterfaceOrientation statusBarOrientation =[UIApplication sharedApplication].statusBarOrientation;

使用第一个检查设备是否正面朝上,第二个将告诉您设备是纵向还是横向。