Je cherchais une réponse à cette question, mais je ne peux rien trouver. Apparemment, iPhone SDK 3.0 a rendu possible la possibilité d’afficher UIImagePickerController en mode paysage, mais je ne trouve aucune méthode qui permette cela. Je penserais que si l'application est en mode paysage par défaut, elle ajusterait automatiquement le contrôleur d'image, mais cela ne fonctionne pas pour moi.
Merci pour toute aide!
Je n'ai pas vérifié si c'était illégal, mais ça a fonctionné pour moi. Si vous voulez que UIImagePickerController commence (et reste) dans le code d'orientation Paysage:
//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];
La méthode didRotate:
- (void) didRotate:(NSNotification *)notification
{
//Maintain the camera in Landscape orientation
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
}
Pas besoin de sous-classe; écrasez simplement la propriété modalPresentationStyle
.
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.modalPresentationStyle = UIModalPresentationFormSheet;
[viewController presentViewController:picker animated:YES completion:NULL];
Si vous avez juste besoin de vous débarrasser de l'avertissement, essayez
@interface UIDevice ()
-(void)setOrientation:(UIDeviceOrientation)orientation;
@end
J'ai développé une classe UIImagePicker en mode paysage. Fonctionne très bien pour les applications que j'ai développées: espérons que cela fonctionnera pour vous aussi:
GitHub: https://github.com/imaginaryunit/iOSLandscapeThreadedImagePicker.git
J'ai aussi une application tout-paysage utilisant UIImagePickerController. Veuillez noter que si vous appelez UIImagePickerController en mode Paysage, votre application peut être rejetée par l'équipe de révision Apple.
J'ai conçu un travail simple autour de ce problème qui utilise le délégué shouldAutoRotate. Apple approuve cette méthode pour une application tout paysage.
Voir ici pour les détails et le code source complet téléchargeable du projet.
Faire une catégorie de UINavigationController et ajouter cette méthode
- (BOOL)shouldAutorotate
{
return NO;
}
Sous-classe UIImagePickerController
et remplacer modalPresentationStyle
comme suit:
- (UIModalPresentationStyle)modalPresentationStyle
{
if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
return UIModalPresentationFormSheet;
}
return [super modalPresentationStyle];
}
Le sélecteur d'images est une feuille de formulaire maintenant et n'est plus en mode plein écran, mais il a l'air beau en mode paysage. Cela devrait être totalement sécurisé pour un magasin.
Cela fonctionne pour la galerie, pas pour prendre des photos.
J'ai résolu ce problème comme suit: après chaque changement d'orientation, je recrée simplement le sélecteur. Essaye ça. Différemment est trop tordu ...
Je développe une classe qui fait de son mieux pour travailler en mode paysage. Découvrez-la sur GitHub: RACameraController