¿Cómo puedo detectar la orientación del dispositivo cuando el locking de orientación está activado y la aplicación solo admite Portrait

El problema que me encuentro es que cuando un usuario toma una foto con nuestra aplicación, utilizando AVCaptureSession , no tengo forma de determinar si tomaron la foto en modo Retrato o Paisaje. Nuestra aplicación solo es compatible con Portrait y mantengo el locking de orientación activado cuando uso mi teléfono, por lo que bash build una solución suponiendo que otros puedan hacer lo mismo.

[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications] usando [UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications] pero cuando el locking de orientación está [UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications] , nunca se reciben notifications. Sé que esta funcionalidad es posible porque la aplicación de la camera base y la camera de la aplicación Google Hangouts pueden detectar la rotation (las animaciones en los botones Cancelar y Destello son evidentes) cuando mi teléfono tiene activado el locking de orientación.

¿Es mi mejor apuesta usar el acelerómetro y detectar el ángulo al que se gira el teléfono? Una vieja respuesta, la detección de la orientación de la pantalla del iPhone , hace que sea muy obvio que detectar el ángulo de esa manera es fácil de hacer (obviamente, adaptar la respuesta para usar Core Motion en lugar de UIAccelerometer), pero tengo curiosidad si hay otra manera de hacerlo eso.

Sí, puedes hacerlo mirando los metadatos de la image. No tengo time para escribir una respuesta detallada (perdón por eso), pero lo hice para mi propio proyecto hace un time a través de CMCopyDictionaryOfAttachments(NULL, buffer, kCMAttachmentMode_ShouldPropagate); donde pasé en un CMSampleBufferRef para el búfer. Tengo ese buffer de

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

pero puedes getlo de

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection también.

Puedes encontrar todas las keys para ese dictionary aquí .

Hice una testing rápida con la aplicación de camera pnetworkingeterminada con el locking de orientación, y obtuve una orientación diferente para las dos imágenes. 6 para el retrato y 3 para el paisaje.

Una vez más, me encantaría darte más detalles sobre esto, pero estoy seguro de que puedes resolverlo mirando los documentos.