Problème d'orientation en mode Paysage lors de l'ouverture de la camera dans iOS 7 sur iPhone

J'ai une application qui est seulement en mode paysage. Dans mon application, j'ouvre la camera à partir d'un de mes points de vue. Il fonctionne bien pour mon iPad mais sur iPhone il se bloque. Il fonctionne bien dans iOS 6, mais l'application se bloque pour iOS 7 et seulement pour iPhone.

Voici mon code.

if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { ipc=[[UIImagePickerController alloc] init ]; ipc.delegate=self; ipc.sourceType=UIImagePickerControllerSourceTypeCamera; [self presentViewController:ipc animated:YES completion:nil]; } else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Desc" message:@"Camera capture is not supported in this device" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [alert show]; [alert release]; } 

Comment résoudre ce problème?

Il se bloque lorsque je choisis de capturer de la camera. Il ne plante pas à partir du code ci-dessus, mais après il se bloque avec l'erreur ci-dessous.

Je reçois cette erreur:

Terminaison de l'application en raison d'une exception non interceptée 'UIApplicationInvalidInterfaceOrientation', raison: 'Les orientations sockets en charge n'ont pas d'orientation commune avec l'application, et shouldAutorotate renvoie YES

Et mon application plante.

Mon code d'orientation sur cette vue.

 -(BOOL)shouldAutorotate { return YES; } -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight ; } 

Je reçois également le même problème précédemment. J'ai suivi les étapes. S'il vous plaît essayez ceci et laissez-moi savoir si vous faites face au même problème. coche entrez la description de l'image ici

Étape 1: vérifiez dans appdelegate.m

 - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return UIInterfaceOrientationMaskAll; } 

Étape 2: Dans votre controller de vue

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{ if (interfaceOrientation==UIInterfaceOrientationLandscapeLeft || interfaceOrientation==UIInterfaceOrientationLandscapeRight) return YES; return NO; } 

Étape 3: votre controller de vue

 -(IBAction)TakePhoto:(id)sender{ if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init]; imagePicker.delegate = self; imagePicker.allowsEditing = YES; imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; imagePicker.mediaTypes = [NSArray arrayWithObjects:(NSSsortingng *) kUTTypeImage, nil]; [self.view.window.rootViewController presentViewController:imagePicker animated:YES completion:nil];//add to view as per requirement } else { UIAlertView *noCam = [[UIAlertView alloc] initWithTitle:@"Notification" message:@"There is No Camera Fecility" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [noCam show]; } } 

Le crash se produit-il au lancement de UIImagePickerController ou après avoir pris une photo avec la camera? J'ai essayé votre code sur un iPod fonctionnant sous iOS7 et cela fonctionne très bien. Le problème pourrait être ailleurs. J'ai vu des accidents se produire avec UIImagePickerController raison de l'utilisation de la memory, ce qui pourrait être quelque chose à vérifier. Aussi pendant que nous y sums, presentModalViewController:animated: est obsolète depuis iOS6.0. Vous devez utiliser presentViewController:animated:completion: place. En regardant également la déclaration de version de votre UIAlertView , il semble que vous n'utilisiez pas ARC donc l'utilisation de la memory est certainement quelque chose que je voudrais examiner. J'espère que cela t'aides.

EDIT: à partir de la documentation UIImagePickerController
Important: The UIImagePickerController class supports portrait mode only. This class is intended to be used as-is and does not support subclassing. The view hierarchy for this class is private and must not be modified, with one exception. You can assign a custom view to the cameraOverlayView property and use that view to present additional information or manage the interactions between the camera interface and your code.

Essayez ce code, cela fonctionne sur mon ancienne application.

 -(BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } 

Peut-être voulez-vous vérifier cela: l' authentification GameCenter dans une application à paysage unique lance UIApplicationInvalidInterfaceOrientation

J'ai trouvé ma solution à partir du lien iOS7 iPad App paysage uniquement, en utilisant UIImagePickerController .

Cela a fonctionné pour moi comme un charme.

J'espère que ça aidera quelqu'un d'autre aussi.

Merci pour votre aide les gens.

J'avais hérité le UIImagePickerController, et substituer les methods de remorquage au paysage soutenu (ou vous pouvez faire une catégorie):

 - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } - (BOOL)shouldAutorotate { return YES; } 

Ajoutez le Portrait (button d'accueil inférieur), Paysage (button d'accueil gauche), Paysage (button d'accueil droit) dans les orientations d'interface sockets en charge (iPad). Orientations d'interface prises en charge (iPad)

Ici, vous devez append la valeur Portrait (button d'accueil du bas), car UIImagePickerController ne prend en charge que le mode portrait, nous devons donc append le mode portrait, sinon il triggersra une exception.