web-dev-qa-db-fra.com

UIImagePickerController in Landscape

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!

22
PF1

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

}
12
erastusnjuki

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];
15
Arie Litovsky

Si vous avez juste besoin de vous débarrasser de l'avertissement, essayez

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

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

3
imaginaryunit

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.

2
GeneCode

Faire une catégorie de UINavigationController et ajouter cette méthode

- (BOOL)shouldAutorotate
{
    return NO;
}
2
Kostiantyn Koval

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.

2
RhodanV5500

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

0
alexandrmoroz

Je développe une classe qui fait de son mieux pour travailler en mode paysage. Découvrez-la sur GitHub: RACameraController

0
Reggian