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

The*_*Jer 7 objective-c accelerometer ios core-motion uideviceorientation

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

我查看了使用[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]但是当Orientation Lock打开时,没有收到任何通知.我知道此功能是可行的,因为当我的手机启用了方向锁定时,基本相机应用和Google环聊应用中的相机可以检测到旋转(取消和Flash按钮上的动画很明显).

我最好使用加速度计并检测手机旋转的角度?一个老的答案,检测iPhone的屏幕方向,很明显检测到这种方式的角度很容易做到(显然适应使用Core Motion而不是UIAccelerometer的答案),但我很好奇是否有另一种方法可以做它.

veg*_*her 1

是的,您可以通过查看图像的元数据来做到这一点。没有时间写出详细的答案(对此感到抱歉),但我不久前为自己的项目做了这件事,通过在缓冲区CMCopyDictionaryOfAttachments(NULL, buffer, kCMAttachmentMode_ShouldPropagate);中传递了 a 。CMSampleBufferRef我从那里得到了那个缓冲区

captureStillImageAsynchronouslyFromConnection:stillImageConnection completionHandler: ^(CMSampleBufferRef imageDataSampleBuffer, NSError *error){},

但你可以从

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection以及。

您可以在这里找到该词典的所有键。

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

再次,我很乐意为您提供更多有关此问题的详细信息,但我相信您可以通过查看文档来弄清楚。