UIImagePickerController in Landscape
-
21-09-2019 - |
Domanda
Sono stato alla ricerca di una risposta a questo, ma non posso venire in mente nulla. A quanto pare, iPhone SDK 3.0 ha reso possibile che UIImagePickerController può essere visualizzato in modalità orizzontale - ma non sto trovando qualsiasi metodo che permetta questo. Vorrei pensare che se l'applicazione è nel paesaggio di default sarebbe regolare automaticamente il controller immagine, ma che non funziona per me.
Grazie per qualsiasi aiuto!
Soluzione
Non ho controllato se questo è illegale, ma ha funzionato per me. Se si desidera che l'UIImagePickerController per iniziare (e rimanere) in Landscape codice di orientamento:
//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];
Il metodo didRotate:
- (void) didRotate:(NSNotification *)notification
{
//Maintain the camera in Landscape orientation
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
}
Altri suggerimenti
Non c'è bisogno di sottoclasse; semplicemente ignorare la proprietà modalPresentationStyle
.
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.modalPresentationStyle = UIModalPresentationFormSheet;
[viewController presentViewController:picker animated:YES completion:NULL];
Se avete solo bisogno di liberarsi del try avvertimento
@interface UIDevice ()
-(void)setOrientation:(UIDeviceOrientation)orientation;
@end
Ho sviluppato una classe UIImagePicker in modalità orizzontale. Grandi opere per le applicazioni che ho sviluppato: spero che funziona anche per voi:
GitHub: https://github.com/imaginaryunit/iOSLandscapeThreadedImagePicker.git
Ho un app all-paesaggio utilizzando troppo UIImagePickerController. Si prega di notare che se si chiama UIImagePickerController in modalità orizzontale, la vostra applicazione è possibile essere respinta da Apple Review Team.
ho ideato un semplice risolvere questo problema che si avvalgono il delegato shouldAutoRotate. Apple ha approva questo metodo per un app all-paesaggio.
qui per i dettagli e scaricabile completa del codice sorgente del progetto.
Fare una categoria di UINavigationController e aggiungere questo metodo
- (BOOL)shouldAutorotate
{
return NO;
}
sottoclasse UIImagePickerController
e di esclusione modalPresentationStyle
come segue:
- (UIModalPresentationStyle)modalPresentationStyle
{
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
return UIModalPresentationFormSheet;
}
return [super modalPresentationStyle];
}
L'immagine-picker è una forma fogli ora e non più in fullscreen-mode, ma si guarda bene nel paesaggio-mode. Questo dovrebbe essere totalmente app-store-safe.
Questo funziona per la galleria, non per scattare foto.
Ho risolto questo problema come segue: dopo ogni variazione dell'orientamento, I semplice ricreare raccoglitrice. Prova questo. Diversamente troppo storto ...
Sto sviluppando una classe che fa del suo meglio per lavorare in modalità orizzontale. Check it out su GitHub: RACameraController