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

时间:2014-05-22 16:19:05

标签: ios objective-c accelerometer core-motion uideviceorientation

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

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

最好使用加速度计并检测手机旋转的角度?一个旧的答案,Detect iPhone screen orientation,很明显检测到这种方式的角度很容易(明显地调整使用Core Motion代替UIAccelerometer的答案),但我很好奇是否有另一个这样做的方式。

1 个答案:

答案 0 :(得分:1)

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

获得了缓冲区

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

但你可以从

获得

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

您可以找到该字典的所有密钥here

使用默认相机应用程序进行快速测试并打开方向锁定,我确实为这两张照片获得了不同的方向。 6为肖像1,3为景观1。

再一次,我很乐意为您提供更多详细信息,但我相信您可以通过浏览文档来了解它。