iOS7 iPad solo aplicación horizontal, utilizando UIImagePickerController

Creo que este es un problema común y muchas respuestas ya no funcionan, muchas solo parcialmente, si tiene iOS7 y su aplicación de iPad es solo Landscape, pero desea usar UIImagePickerController con UIImagePickerController de origen o UIImagePickerControllerSourceTypeCamera .

¿Cómo configurarlo correctamente, así que funciona al 100%? Y no obtiene orientaciones mixtas y evita el error “Las orientaciones admitidas no tienen una orientación común con la aplicación, y shouldAutorotate devuelve YES “.

Si su aplicación para iPad es horizontal solo en todas las condiciones, solo haga estos 3 pasos:

1) En tu aplicación delegada

 - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return UIInterfaceOrientationMaskAll; } 

2) Crear un encabezado de categoría

 #import "UIViewController+OrientationFix.h" @implementation UIViewController (OrientationFix) - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { return UIInterfaceOrientationIsLandscape(toInterfaceOrientation); } - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } @end 

3) Crear una implementación de categoría

 #import "UIImagePickerController+OrientationFix.h" @implementation UIImagePickerController (OrientationFix) - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { return UIInterfaceOrientationIsLandscape(toInterfaceOrientation); } - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } @end 

Nota: No es necesario importar estas categorías en ningún lado, solo se comstackn con el proyecto

Nota: no es necesario implementar estos métodos en ningún VC

Nota: no es necesario cambiar sus orientaciones soportadas por plist

Esto se prueba y funciona bajo cualquier condición

He visto este código del código de muestra de Apple.

 UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext; 

Debido a esto, UIModalPresentationCurrentContext UIImagePickerController se abrirá según la orientación actual del dispositivo.

La documentación de Apple dice:

“Importante: la clase UIImagePickerController solo admite el modo retrato”.

Sin embargo, funciona bien en el paisaje para pantalla completa y en iOS 6.

Referencia de la clase UIImagePickerController

Gracias a Peter Lapisu sugerencia anterior. No funciona para mí (tal vez estoy en iOS 8.3) pero pude modificarlo para solucionar mis problemas de orientación. Mis códigos están debajo

En delegado de aplicaciones

 - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return UIInterfaceOrientationMaskAll; } 

Categoría UIImagePickerController

 @implement UIImagePickerController (extensions) - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return [[UIApplication sharedApplication] statusBarOrientation]; } @end 

Categoría UIViewController

 @implementation UIViewController (extensions) - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskAll; } @end 

Aunque la mayoría de las respuestas recomiendan usar .currentContext , me he enterado después de descartar el imagepicker, todo estaba mal.

En un iPad con paisajismo, en el que es mejor si usas .formSheet :

 let picker = UIImagePickerController() picker.modalPresentationStyle = .formSheet picker.sourceType = .photoLibrary picker.delegate = self self.present(picker, animated: true)