La rotation d'iOS 6 ne fonctionne pas

J'ai remplacé mon UINavigationController pour implémenter ces methods:

-(BOOL)shouldAutorotate { return [[self.viewControllers lastObject] shouldAutorotate]; } -(NSUInteger)supportedInterfaceOrientations { return [[self.viewControllers lastObject] supportedInterfaceOrientations]; } - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation]; } 

Maintenant, à partir de ma première vue, je présente modalement ce MSNavigationPaneViewController ici qui est comme un controller de barre d'onglet coulissant de côté Facebook.

J'ai besoin d'un de mes controllers de vue qui sont affichés ici pour être affiché en mode paysage uniquement alors que le rest des vues de l'application sont en mode portrait uniquement.

Donc, dans tous mes autres controllers de vue, j'ai ajouté:

 -(NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; } - (BOOL)shouldAutorotate { return UIInterfaceOrientationMaskPortrait; } 

et dans celui que je veux Paysage j'ai ajouté:

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

Cependant, toutes mes vues tournent.

Si je change de shouldRotate à NON sur ces autres vues, elles restnt dans Portrait et la vue que je veux être Paysage peut être pivotée, mais je ne peux pas la faire pivoter elle-même. En outre, une fois returnné si je returnne à une autre vue qui a shouldRotate = NO; alors il ne peut pas être returnné à Portrait.

Cela fait des heures que je suis là et je n'arrive pas à le faire fonctionner.

Merci

MODIFIER —–

Je travaille maintenant à moitié et j'ai commencé une nouvelle question pour faire fonctionner la rotation automatique ici

Il semble que vous êtes confus ce qu'il faut returnner dans shouldAutorotate. Utilisez le code suivant comme exemple.

Étant donné que iOS appelle l'outil shouldAutorotate de votre application en réponse à un événement de l'accéléromètre, il connaît déjà la nouvelle orientation; Si votre application répond «OUI», iOS peut alors vérifier l'orientation actuelle par rapport à la list des users pris en charge et décider d'une décision sans que votre application request l'orientation actuelle.

// iOS 6

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

En outre, vous pouvez laisser le controller de vue qui présente votre controller de vue modale l'informer de la rotation. Utilisation: presentViewController: animé: completion: pour présenter le controller de vue. presentModalViewController: animé: est déconseillé si par hasard vous l'utilisez.

Si vous ajoutez une application:supportedInterfaceOrientationsForWindow: :, assurez-vous de suivre les directives ci-dessous. La documentation indique que si vous implémentez supportedInterfaceOrientations sur un VC, il devrait replace le délégué de l'application. Cependant, les gens ont remarqué que cela faisait une différence sur la façon dont vous ajoutez le rootViewController à la window principale.

Utilisation:

 window.rootViewController = viewController 

au lieu de:

 [window addSubview:viewController.view]; 

Je l'ai fait de cette façon

 -(BOOL) shouldAutorotate{ return YES; } -(NSUInteger) supportedInterfaceOrientations{ if ([self.visibleViewController isKindOfClass:[ZoomPictureViewController class]]) { return UIInterfaceOrientationMaskAll; } return UIInterfaceOrientationMaskPortrait; } 

Assurez-vous que vous avez cliqué sur les buttons d'orientation dans Xcode pour activer les orientations souhaitées et renvoyer les orientations dans la méthode supportedInterfaceOrientations.

Tout d'abord, assurez-vous que vous avez cliqué sur les buttons d'orientation dans Xcode pour activer les orientations souhaitées. Ensuite, passez quelques heures à googler tous les bugs et les problèmes rencontrés avec iOS 6. Et quelques heures d'expérimentation avec différentes techniques.

Ce message contient quelques indices, mais est loin d'être le dernier mot en la matière.

Notez en particulier que vous devez maintenant identifier le "controller de vue racine" et concentrer la plupart des controls de rotation (mais pas tous) là-bas, en l'implémentant dans chaque controller de vue.