UIImagePickerController en Landscape

He estado buscando una respuesta a esto, pero no puedo encontrar nada. Aparentemente, el iPhone SDK 3.0 hizo posible que UIImagePickerController se pueda mostrar en modo apaisado, pero no encuentro ningún método que lo permita. Pensaría que si la aplicación está en el paisaje de forma predeterminada, se ajustará automáticamente el controlador de imagen, pero eso no funciona para mí.

¡Gracias por cualquier ayuda!

No he comprobado si esto es ilegal, pero funcionó para mí. Si desea que el UIImagePickerController comience (y permanezca) en el código de orientación horizontal:

//Initialize picker UIImagePickerController * picker = [[UIImagePickerController alloc] init]; picker.delegate = self; //set Device to Landscape. This will give you a warning. I ignored it. //warning: 'UIDevice' may not respond to '-setOrientation:' [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; //Set Notifications so that when user rotates phone, the orientation is reset to landscape. [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; //Refer to the method didRotate: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:@"UIDeviceOrientationDidChangeNotification" object:nil]; //Set the picker source as the camera picker.sourceType = UIImagePickerControllerSourceTypeCamera; //Bring in the picker view [self presentModalViewController:picker animated:YES]; 

El método didRotate:

 - (void) didRotate:(NSNotification *)notification { //Maintain the camera in Landscape orientation [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; } 

No hay necesidad de subclase; simplemente anule la propiedad modalPresentationStyle .

  UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.modalPresentationStyle = UIModalPresentationFormSheet; [viewController presentViewController:picker animated:YES completion:NULL]; 

Si solo necesitas deshacerte del bash de advertencia

 @interface UIDevice () -(void)setOrientation:(UIDeviceOrientation)orientation; @end 

Desarrollé una clase UIImagePicker en modo horizontal. Funciona muy bien para las aplicaciones que he desarrollado: espero que funcione para usted también:

GitHub: https://github.com/imaginaryunit/iOSLandscapeThreadedImagePicker.git

También tengo una aplicación para todo el paisaje que usa UIImagePickerController. Tenga en cuenta que si llama a UIImagePickerController en modo horizontal, el equipo de revisión de Apple puede rechazar su aplicación.

Ideé un trabajo simple sobre este tema que utiliza el delegado shouldAutoRotate. Apple aprueba este método para una aplicación de todo el paisaje.

Vea aquí los detalles y el código fuente completo del proyecto descargable.

Haz una categoría de UINavigationController y agrega este método

 - (BOOL)shouldAutorotate { return NO; } 

La subclase UIImagePickerController y anula modalPresentationStyle siguiente manera:

 - (UIModalPresentationStyle)modalPresentationStyle { if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { return UIModalPresentationFormSheet; } return [super modalPresentationStyle]; } 

El selector de imágenes ahora es una hoja de formulario y ya no está en modo de pantalla completa, pero se ve bien en modo paisaje. Esto debería ser totalmente seguro para la tienda de aplicaciones.

Esto funciona para la galería, no para tomar fotos.

Resolví este problema de la siguiente manera: después de cada cambio en la orientación, simplemente recreé el selector. Prueba esto. De manera diferente, es demasiado torcido …

Estoy desarrollando una clase que hace todo lo posible para trabajar en modo horizontal. Compruébelo en GitHub: RACameraController