如何处理UIDeviceOrientationFaceUp和UIDeviceOrientationFaceDown?

时间:2010-12-12 18:36:27

标签: ios uiinterfaceorientation uidevice

这里有一个菜鸟问题。

我用以下方法检测方向:

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];

一切都很好,花花公子,我根据报告的方向

重新定位我的文本字段和标签

if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown)

以及其他一切的其他内容

我最近才发现的问题是UIDevice报告UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown时的问题。我该如何处理这种情况?我怎么知道纵向或风景中是否发生了UIDeviceOrientationFaceUpUIDeviceOrientationFaceDown?我知道设备正朝上或朝下,但我不知道是否应该将所有内容重新定位为纵向或横向。

谢谢你!

4 个答案:

答案 0 :(得分:33)

Apple建议不要使用设备方向进行视图布局。相反,每个视图控制器都具有interfaceOrientation属性,而UIApplication具有statusBarOrientation属性,这两个属性都将返回当前接口方向,这适用于视图布局。

要监控更改,我们会调用UIViewController个{{1}}方法以及willRotateToInterfaceOrientation:duration:等通知,这些方法会在界面方向发生变化时发布。

答案 1 :(得分:4)

此博客文章:http://blogs.remobjects.com/blogs/mh/2010/06/29/p1685解释得非常好。

答案 2 :(得分:0)

有点晚了,希望它会对某人有所帮助。

对于iOS 6.0及更高版本:

1)在视图设置期间设置此代码以接收轮换通知:

  // Set Listener to receive orientation notifications from the device
  [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
  [[NSNotificationCenter defaultCenter] addObserver:self
                                           selector:@selector(detectOrientation)
                                               name:UIDeviceOrientationDidChangeNotification
                                             object:nil];

2)设置此代码以捕获旋转后的通知:

-(void)detectOrientation{      
  switch ([[UIDevice currentDevice] orientation]) {
    case UIDeviceOrientationFaceDown:{
      NSLog(@"UIDeviceOrientationFaceDown");
      break;
    }
    case UIDeviceOrientationFaceUp:{
      NSLog(@"UIDeviceOrientationFaceUp");
      break;
    }
    case UIDeviceOrientationLandscapeLeft:{
      NSLog(@"UIDeviceOrientationLandscapeLeft");
      break;
    }
    case UIDeviceOrientationLandscapeRight:{
      NSLog(@"UIDeviceOrientationLandscapeRight");
      break;
    }
    case UIDeviceOrientationPortrait:{
      NSLog(@"UIDeviceOrientationPortrait");
      break;
    }
    case UIDeviceOrientationPortraitUpsideDown:{
      NSLog(@"UIDeviceOrientationPortraitUpsideDown");
      break;
    }
    case UIDeviceOrientationUnknown:{
      NSLog(@"UIDeviceOrientationUnknown");
      break;
    }
    default:{
      break;
    }
  }

}

答案 3 :(得分:-1)

我有同样的问题

  

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

此方法为7种可能的设备位置状态生成通知:

UIDeviceOrientationPortrait
UIDeviceOrientationPortraitUpsideDown
UIDeviceOrientationLandscapeLeft
UIDeviceOrientationLandscapeRight
UIDeviceOrientationFaceUp
UIDeviceOrientationFaceDown
UIDeviceOrientationUnknown

但我只需要前4个,这是我解决这个问题的方法(包括代码): How to handle UIDeviceOrientation for manage views layouts