我遇到的问题是,当用户使用我的应用程序使用AVCaptureSession
拍摄照片时,我无法确定他们是以纵向还是横向模式拍摄照片。我们的应用程序仅支持Portrait,并且在使用手机时保持方向锁定,因此我尝试构建解决方案,假设其他人也可以这样做。
我研究过使用[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]
但是当方向锁定开启时,没有收到任何通知。我知道此功能是可行的,因为当我的手机启用了方向锁定时,基本相机应用和Google环聊应用中的相机可以检测到旋转(取消和Flash按钮上的动画很明显)。
最好使用加速度计并检测手机旋转的角度?一个旧的答案,Detect iPhone screen orientation,很明显检测到这种方式的角度很容易(明显地调整使用Core Motion代替UIAccelerometer的答案),但我很好奇是否有另一个这样做的方式。
答案 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。
再一次,我很乐意为您提供更多详细信息,但我相信您可以通过浏览文档来了解它。