如何获得iPhone目前的方向?

有没有一种特殊的方法来获取iPhone的方向? 我不需要度数或弧度,我希望它返回一个UIInterfaceOrientation对象。 我只是需要一个if-else的结构

if(currentOrientation==UIInterfaceOrientationPortrait ||currentOrientation==UIInterfaceOrientationPortraitUpsideDown) { //Code } if (currentOrientation==UIInterfaceOrientationLandscapeRight ||currentOrientation==UIInterfaceOrientationLandscapeLeft ) { //Code } 

提前致谢!

这很可能是你想要的:

 UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation]; 

然后你可以使用系统macros,如:

 if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) { } 

如果您想要设备方向使用:

 UIDeviceOrientation deviceOrientation = [[UIDevice currentDevice] orientation]; 

这包括像UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown

正如其他答案中所讨论的,您需要interfaceOrientation,而不是deviceOrientation。

最简单的方法是在UIViewController上使用属性interfaceOrientation。 (所以大多数情况下,只是:self.interfaceOrientation会做)。

可能的值是:

 UIInterfaceOrientationPortrait = UIDeviceOrientationPortrait, UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown, UIInterfaceOrientationLandscapeLeft = UIDeviceOrientationLandscapeRight, UIInterfaceOrientationLandscapeRight = UIDeviceOrientationLandscapeLeft 

记住:通过将您的设备转向右侧来input向左方向。

这里是我写的代码片段,因为当方向被改变时,我得到了更奇怪的问题回到我的根视图….我看到只是调出应该被调用的方法,但看起来似乎是。这个工程很好,没有错误

 - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationLandscapeLeft){ //do something or rather [self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeLeft]; NSLog(@"landscape left"); } if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationLandscapeRight){ //do something or rather [self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationLandscapeRight]; NSLog(@"landscape right"); } if ([[UIDevice currentDevice]orientation] == UIInterfaceOrientationPortrait){ //do something or rather [self shouldAutorotateToInterfaceOrientation:UIInterfaceOrientationPortrait]; NSLog(@"portrait"); } } 

UIInterfaceOrientation现在已经被弃用了, UIDeviceOrientation包括了UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown所以不能依靠给你的界面方向。

解决scheme非常简单

 if (CGRectGetWidth(self.view.bounds) > CGRectGetHeight(self.view.bounds)) { // Landscape } else { // Portrait }