使用相机时如何获取设备的方向?

Posted

技术标签:

【中文标题】使用相机时如何获取设备的方向?【英文标题】:how to get the orientation of device when use camera? 【发布时间】:2015-01-23 06:18:10 【问题描述】:

我想知道拍照时手机的方向,我用:

  NSLog(@"%ld", self.interfaceOrientation);
  NSLog(@"%ld", [UIDevice currentDevice].orientation);
  NSLog(@"%ld", [[UIApplication sharedApplication] statusBarOrientation]);

但不管我到底是什么方向,代码都打印 1 1 1 ,代表 UIDeviceOrientationPortrait; 在我的应用目标中,设备方向我只选择纵向,

这是导致代码显示错误结果的原因吗?

我怎样才能得到真正的方向??????

【问题讨论】:

ios: camera orientation 的可能重复项 【参考方案1】:

默认相机方向是UIInterfaceOrientationLeft,如果你想用相机改变方向,你必须手动做。

AVCaptureConnection *conn=self.previewLayer.connection;

if ([conn isVideoOrientationSupported])

    switch (toInterfaceOrientation)
    
        case UIInterfaceOrientationPortrait:
            [conn setVideoOrientation:AVCaptureVideoOrientationPortrait];
            break;
        case UIInterfaceOrientationLandscapeRight:
            [conn setVideoOrientation:AVCaptureVideoOrientationLandscapeRight]; 
            break;
        case UIInterfaceOrientationLandscapeLeft:
            [conn setVideoOrientation:AVCaptureVideoOrientationLandscapeLeft]; 
            break;
        default:
            [conn setVideoOrientation:AVCaptureVideoOrientationPortrait]; 
            break;
    

【讨论】:

我想要的情况是:无论我拍照时手机是什么方向,照片看起来总是和我们眼睛看到的方向一致;;所以,当我拍照时,我需要知道我是否改变了方向..... 贴出代码的意思是“AVCaptureConnection *conn=self.previewLayer.connection;”可以确定照片的方向,所以我可以将 conn 设置为“toInterfaceOrientation”方向? 实际上它决定了您如何访问方向模式并根据需要使用它。无论如何,您必须手动执行此操作,iOS 不会在相机运行时返回您的方向。 如果我想纠正照片的方向,首先我需要知道它是怎么出错的,这意味着我在拍照时需要知道手机的方向... ...;如果 ios 有不支持相机运行的方向,这意味着我需要弄清楚手机是如何旋转的 - -!...有什么方法可以用来做这个吗?【参考方案2】:

无法获取设备的方向,因为您将支持的界面方向固定为纵向,同时启用横向并尝试以下代码,

UIInterfaceOrientation interfaceOrientation = [[UIApplication sharedApplication] statusBarOrientation];
if(UIDeviceOrientationIsLandscape(interfaceOrientation))
    NSLog(@"Landscape Orientation");

else

   NSLog(@"Portrait Orientation");

希望对你有帮助

【讨论】:

它不起作用,仍然总是显示 UIDeviceOrientationPortrait;你的意思是因为我只选择了纵向,所以方向不显示正确....;如果是这样,有什么办法可以吗?弄清楚我什么时候旋转手机? 是的,这是因为您只在应用目标中选择了 UIDeviceOrientationPortrait。这个方法[[UIApplication sharedApplication] statusBarOrientation] 给出了应用程序的方向,而不是设备的方向。为了获得正确的方向,您也需要选择横向(在应用程序目标中) interfaceOrientation != deviceOrientation... 不同的野兽。您可以在 plist 中指定 interfaceOrientations,但您可以限制设备在 3d 空间中的实际处理方式吗? "选择横向" 仍然没有帮助 - -!;就像@iOSNoob 说的"iOS 不会在相机运行时返回你的方向"~~~~~~~~~ 没错,interfaceOrientation != deviceOrientation,如果我们允许设备旋转应用程序方向以匹配设备方向(通过选择支持的界面方向为纵向、倒置、横向左侧和横向右侧Targets ) ,那么就有可能获得正确的方向。

以上是关于使用相机时如何获取设备的方向?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NDK 中获取相机方向

如何在纵向锁定设备时获取设备方向

如何使用 CoreMotion 在空间中获取设备方向

如何获取IP地址打开球形相机设备并检查是不是连接?

web获取照片EXIF信息(例如:拍照方向相机设备型号拍摄时间ISO 感光度GPS 地理位置等数据)

web获取照片EXIF信息(例如:拍照方向相机设备型号拍摄时间ISO 感光度GPS 地理位置等数据)