我遇到的问题是,当用户使用我们的应用使用 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/