with uiimagepickercontrollerdelegate how and iphone cocoa-touch image uiimagepickercontroller landscape

iphone - how - uiimagepickercontrollerdelegate swift 4



UIImagePickerController en Landscape (9)

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!



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



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.


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];


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]; }


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 ...


Si solo necesitas deshacerte del intento de advertencia

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


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 here los detalles y el código fuente completo del proyecto descargable.