如何处理UIDeviceOrientationFaceUp和UIDeviceOrientationFaceDown?

19
这里有一个新手问题。
我使用以下代码检测设备的方向:
UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];
一切都很顺利,我根据报告的方向重新定位我的文本框和标签,例如:
if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown)
和 else{} 用于其他情况
最近我发现的问题是当UIDevice报告UIDeviceOrientationFaceUp或UIDeviceOrientationFaceDown时。 我应该如何处理这种情况?我如何知道UIDeviceOrientationFaceUp和UIDeviceOrientationFaceDown是在纵向还是横向模式下发生的? 我知道设备面朝上或朝下,但我不知道是否应将所有内容重新定位为纵向或横向。
谢谢!
3个回答

33

这是正确的答案,只是重构UIDevice方向响应(如博客建议)不如监听UIViewController的interfaceOrientation好。干得好。 - Jessedc
我也更喜欢这个答案。caprica13,你能把它标记为正确吗? - Jack Lawrence
1
有时候,我们需要根据设备方向而不是 UI 方向来布局视图。例如,看看原生相机应用或 Instagram 的相机界面 - 容器保持固定的 UI 方向,而图标随着设备方向旋转。 - Pwner

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;
    }
  }

}

-1

我也遇到了同样的问题:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

这个方法会为7种可能的设备方向状态生成通知:

UIDeviceOrientationPortrait
UIDeviceOrientationPortraitUpsideDown
UIDeviceOrientationLandscapeLeft
UIDeviceOrientationLandscapeRight
UIDeviceOrientationFaceUp
UIDeviceOrientationFaceDown
UIDeviceOrientationUnknown

但我只需要前4个,这是我的解决方法(包括代码): 如何处理UIDeviceOrientation以管理视图布局


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接