9

Tengo una aplicación que admite completamente la rotación. Estoy agregando modalmente un UIImagePickerController para el cual no hay soporte para UIInterfaceOrientationLandscape y no puedo hacer que el controlador permanezca en vertical.¿Cómo evitar que gire un UIImagePickerController modal?

En otras palabras, necesito deshabilitar la rotación para el UIImagePickerController para que permanezca en vertical, sin quitar la rotación para el resto de mi aplicación. esto parece básico, pero parece que no puedo ubicarlo. ¿Cómo puedo evitar esta rotación?



ACTUALIZACIÓN

Como se sugirió, he intentado crear subclases con el siguiente código:

@interface UAImagePickerController : UIImagePickerController { 
} 
@end 

@implementation UAImagePickerController 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
    return UIDeviceOrientationIsPortrait(toInterfaceOrientation); 
} 
@end 

La línea no está siendo golpeado en absoluto con un punto de interrupción ... Creo que debe ser algo funky sobre el UIImagePickerView

+0

Para el registro, me acabo de dar cuenta de que la vista de imagepicker en mi aplicación de iPhone gira a pesar de que la aplicación no es compatible con el paisaje. ¿Entonces no parece haber una forma "legal" de deshabilitar la rotación de la vista de la cámara? Suena como un radar, o al menos como una solicitud de cambio. – DaGaMs

Respuesta

-2

Subclase UIImagePickerController y tiene esa nueva clase implementar shouldAutorotateToInterfaceOrientation: a hacerlo girar a vertical solamente, algo como esto:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
+0

lo intenté, todavía giraba y ni siquiera se activaba. – coneybeare

+0

Como una adición a su respuesta, siempre debería (ahora en día) usar las macros 'UIDeviceOrientationIsLandscape' y' UIDeviceOrientationIsPortrait' en su lugar. Por ejemplo, las aplicaciones de iPad que no admitan al menos 2 orientaciones (es decir, retrato hacia arriba y retrato hacia abajo o paisaje hacia la izquierda y paisaje hacia la derecha) serán rechazadas. Estas macros devuelven 'SÍ' ya sea en orientación horizontal o en orientación vertical, dependiendo de cuál utilice. – jer

+0

@jer He enviado una aplicación para iPad que solo admite 1 orientación y no fue rechazada, por lo que no estoy seguro de dónde está dibujando esa afirmación. En cuanto al código en sí, es lo que Xcode genera automáticamente al crear una nueva clase de controlador de vista, por lo que si está seguro de que es propenso a un rechazo, debe presentar un error con Apple. –

-4

Debe anular _isSupportedInterfaceOrientation :, y no shouldAutorotateToInterfaceOrientation:

iPad 2 UIImagePickerController camera auto-rotation driving me mad!

+0

Este es un método privado y no es compatible con Apple. No es una solución recomendada y probablemente será rechazado por usarla. – coneybeare

+0

Gracias gorra !!! Pero es trabajo Será rechazado o no depende de su implementación. Hay una manera de confundir a cualquiera que lo verifique;) – Dmitry

-4

apenas caer en esta por encima de su bloque ViewControllers @implementation (en el archivo .m)

@implementation UIImagePickerController (portrait) 

- (BOOL)_isSupportedInterfaceOrientation:(UIDeviceOrientation)orientation 
{ 
    return UIDeviceOrientationIsPortrait(orientation); 
} 

@end 
+1

Los métodos privados infringen el acuerdo de desarrollador de Apple, son peligrosos y no deben colocarse en ningún entorno de producción. – coneybeare

-1

Creé mi UIImageP ickerController dentro de un UIViewController con el método implementado shouldAutorotateToInterfaceOrientation respectiva y lo presentó como esto

[self.view addSubview:myImagePicker.view]; 
[targetVC.navigationController presentModalViewController:self animated:YES]; 

Espero que ayude.

Cuestiones relacionadas