6

Veuillez noter que la réponse ci-dessous - ne fonctionne pas pour iOS6 alors j'ai encore besoin d'une réponse!L'application est activée uniquement pour Portrait, mais UIImagePickerController tourne dans iOS6

Mon application est activée uniquement pour le mode Portrait.

Toutefois, si j'insère un UIImagePickerController à l'intérieur en tant que sous-vue et que vous faites pivoter le périphérique, les barres supérieure et inférieure restent au même emplacement, mais UIImagePickerController pivote.

Comment puis-je l'empêcher de tourner?

Voici le code:

[self.view.window addSubview:self.imagePickerController.view]; 
    self.imagePickerController.showsCameraControls = NO; 
    self.imagePickerController.view.frame = CGRectMake(0, 90, 320, 320); 
    self.imagePickerController.allowsEditing = NO; 

ÉDITÉE

J'utilise iOS6 où shouldAutorotate est de ne pas calle

+0

S'il vous plaît jeter un oeil à: http://stackoverflow.com/questions/538041/uiimagepickercontroller-camera-preview-is-portrait-in-landscape-app – c0d3Junk13

Répondre

12

Ajouter cette catégorie UIImagePickerController dans votre classe,

@interface UIImagePickerController(Nonrotating) 
- (BOOL)shouldAutorotate; 
@end 

@implementation UIImagePickerController(Nonrotating) 

- (BOOL)shouldAutorotate { 

    return NO; 
} 

@end 
+1

Qu'entendez-vous par l'ajout dans votre classe? Est-ce que ce pourrait être un fichier séparé? si oui, comment y faire référence? – Dejell

+0

@Odelya Dans yourClass.m avant '@implementation yourClass' ajouter cette catégorie .. –

+0

Cela ne fonctionne pas. Lorsque je fais tourner l'iPhone, le UIImagePickerController tourne également. Il n'écoute aucune des méthodes – Dejell

0

Sur e possibilité consiste à remplacer la

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation; 
procédé

de UIImagePickerController. Je ne suis pas sûr que ce soit la meilleure possibilité mais cela fonctionnera.

Donc, si vous voulez que votre UIImagePickerController à être tourné pour portrait utiliser le code suivant

@interface PortraitUIImagePickerController : UIImagePickerController 

@end 

Et la mise en œuvre devrait ressembler à l'

suivant
@implementation PortraitUIImagePickerController 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
{ 
    return UIInterfaceOrientationIsPortrait(toInterfaceOrientation); 
} 

@end 
+0

J'utilise iOS6 et shouldAutorotateToInterfaceOrientation est obsolète – Dejell

2

comprennent les éléments suivants dans votre contrôleur cette volonté travailler, je suis juste en train de créer la catégorie de UIImagePickerController

@interface UIImagePickerController (private) 

- (BOOL)shouldAutorotate; 
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation; 
- (NSUInteger)supportedInterfaceOrientations; 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation; 

@end 


@implementation UIImagePickerController (Private) 

- (NSUInteger)supportedInterfaceOrientations { 

    return UIInterfaceOrientationMaskPortrait; 
} 

- (BOOL)shouldAutorotate { 

    return UIInterfaceOrientationMaskPortrait; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { 
    return UIInterfaceOrientationPortrait; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
@end 
+0

Comment l'utiliser dans le code? Ai-je besoin d'importer quelque chose? – Dejell

+0

juste après dans votre fichier ViewController.m avant la @implementation. – junaidsidhu

+0

Voulez-vous dire que je peux simplement créer 2 fichiers h. et m., les localiser n'importe où dans le projet et cela fonctionnera? – Dejell

0

La catégorie dans la réponse la plus votée fonctionne, mais comme il est déconseillé d'utiliser des catégories, vous pouvez également créer une sous-classe de UIImagePickerController et l'utiliser.

Si vous voulez éviter la rotation de la UIImagePickerController ajouter la classe suivante

UINonRotatableImagePickerController.h

@interface UINonRotatableImagePickerController : UIImagePickerController 

@end 

UINonRotatableImagePickerController.m

@implementation UINonRotatableImagePickerController 

- (BOOL)shouldAutorotate 
{ 
    return NO; 
} 

@end 

Vous devez changer la classe UIImagePicker dans la pour utiliser UILandscapeImagePickerController ou si vous l'attribuez au code, modifiez

UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 

à

UIImagePickerController *picker = [[UINonRotatableImagePickerController alloc] init]; 

et comprennent UINonRotatableImagePickerController.h dans votre code.

+0

imagePicker est toujours Portrait et ne supporte jamais le sous-classement, Il ne tourne que si le sélecteur d'image est ajouté comme subview car il tourne à cause de superview, pas lui-même. – AsifHabib

+0

Peut-être que c'est le cas pour l'iPhone, mais j'ai mon plein écran imagepicker en paysage pour l'iPad. – masam

Questions connexes