UIImagePickerController in Landschaft
-
21-09-2019 - |
Frage
Ich habe eine Antwort auf diese gesucht, kann aber mit etwas nicht kommen. Offenbar 3.0 iPhone SDK machte es möglich, dass UIImagePickerController kann im Querformat angezeigt werden - aber ich bin keine Methode zu finden, die dies ermöglichen. Ich würde das denken, wenn die Anwendung in der Landschaft ist standardmäßig wäre es automatisch die Bildsteuerung anpassen, aber das funktioniert nicht für mich.
Vielen Dank für jede Hilfe!
Lösung
Ich habe nicht geprüft, ob dies illegal ist, aber es funktionierte für mich. Wenn Sie die UIImagePickerController beginnen sollen (und Aufenthalt) in Querformat Code:
//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];
Das Verfahren didRotate:
- (void) didRotate:(NSNotification *)notification
{
//Maintain the camera in Landscape orientation
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
}
Andere Tipps
Keine Notwendigkeit, Unterklasse; außer Kraft setzen einfach die modalPresentationStyle
Eigenschaft.
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.modalPresentationStyle = UIModalPresentationFormSheet;
[viewController presentViewController:picker animated:YES completion:NULL];
Wenn Sie nur von der Warnung versuchen, um loszuwerden,
@interface UIDevice ()
-(void)setOrientation:(UIDeviceOrientation)orientation;
@end
Ich habe eine UIImagePicker Klasse im Querformat entwickelt. Funktioniert hervorragend für Anwendungen, die ich entwickelt habe: Hoffnung es für Sie funktioniert auch:
GitHub: https://github.com/imaginaryunit/iOSLandscapeThreadedImagePicker.git
Ich habe eine All-Landschaft App zu verwenden UIImagePickerController. Bitte zu beachten, dass, wenn Sie UIImagePickerController im Querformat-Modus aufrufen, Ihre Anwendung möglich ist, von Apple Review-Team abgelehnt.
erdacht ich eine einfache Arbeit um dieses Problem, das die shouldAutoRotate Delegierten nutzen machen. Apple genehmigt diese Methode für ein All-Landschaft App.
Siehe hier für die Details und herunterladbare Voll Projekt Quellcode.
Erstellen Sie eine Kategorie von UINavigationController und fügen Sie diese Verfahren
- (BOOL)shouldAutorotate
{
return NO;
}
Subclass UIImagePickerController
und Überschreibung modalPresentationStyle
wie folgt:
- (UIModalPresentationStyle)modalPresentationStyle
{
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
return UIModalPresentationFormSheet;
}
return [super modalPresentationStyle];
}
Die Bild Picker ist ein Form-Blatt jetzt und nicht mehr im Vollbild-Modus, aber es sieht gut aus in der Landschaft-Modus. Dies sollte total App-Store-sicher sein.
Dies funktioniert für die Galerie, nicht zu arbeiten.
Ich löste dieses Problem wie folgt: Nach jeder Änderung der Orientierung, ich einfach neu zu erstellen Picker. Versuche dies. Unterschiedlich ist zu krumm ...
Ich entwickle eine Klasse, die ihre beste Arbeit versucht, im Landschaftsmodus. Check it out auf GitHub: RACameraController