ios - 当方向锁定打开且应用程序仅支持纵向时,如何检测设备方向

标签 ios objective-c accelerometer core-motion uideviceorientation

我遇到的问题是,当用户使用我们的应用使用 AVCaptureSession 拍照时,我无法确定他们是在纵向还是横向模式下拍摄照片。我们的应用程序仅支持纵向,并且我在使用手机时保持方向锁定,因此我正在尝试构建一个假设其他人可能会这样做的解决方案。

我研究过使用 [UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications] 但是当方向锁定打开时,不会收到任何通知。我知道这个功能是可行的,因为当我的手机打开方向锁定时,基本相机应用程序和 Google Hangouts 应用程序中的相机可以检测到旋转(取消和闪光按钮上的动画很明显)。

我最好的选择是使用加速度计并检测手机旋转的角度吗?一个老答案,Detect iPhone screen orientation , 很明显,以这种方式检测角度很容易做到(显然调整答案以使用 Core Motion 而不是 UIAccelerometer),但我很好奇是否有另一种方法可以做到这一点。

最佳答案

是的,您可以通过查看图像的元数据来做到这一点。没有时间写一个详细的答案(对此感到抱歉),但我通过 CMCopyDictionaryOfAttachments(NULL, buffer, kCMAttachmentMode_ShouldPropagate); 在我传递了一个CMSampleBufferRef 缓冲区。我从

得到了那个缓冲区

captureStillImageAsynchronouslyFromConnection:stillImageConnection 完成处理程序:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error){},

但是你可以从

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 也是如此。

您可以找到该词典的所有键 here .

在方向锁定打开的情况下使用默认相机应用程序进行了快速测试,我确实得到了两张照片的不同方向。 6 个用于人像,3 个用于风景。

同样,我很乐意为您提供有关此的更多详细信息,但我相信您可以通过查看文档来弄明白。

关于ios - 当方向锁定打开且应用程序仅支持纵向时,如何检测设备方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23812278/

相关文章:

ios - 如何使用自动布局调整固定宽度和高度的 UIImageView 大小

objective-c - 如何从给定的数字中获取星期几

objective-c - 在 iphone 中提供指向 tableview 单元格的超链接

ios - 如何计算设备移动的最后两点的加速度计

ios - UITableView 滚动时动态加载内容

android - 使用 phonegap 在 android 和 ios 中读取 Pdf、Doc、Ppt 和 xls 文件

ios - 如何在 UIView 加载时执行我的方法?

ios - 在多个类中定义相同的协议(protocol)

android - 在android中使用加速度计平滑移动图像

android - 用于水平仪的方向传感器加速度计