2010-06-18 4 views
6

À un moment donné dans mon application, je voudrais désactiver temporairement la fonction de rotation - "verrouiller" l'orientation dans le code, similaire à ce que fait l'interrupteur à bascule sur l'iPad Matériel.Comment verrouiller temporairement l'orientation de l'iPad/iPhone

Je fais actuellement:

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications] 

et quand je suis à travers, j'appelle:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications] 

Bien que tout cela semble fonctionner, la documentation de l'API indique qu'il devrait toujours être commence suivi d'un fin - et je le fais essentiellement à l'envers. Y a-t-il une API plus appropriée pour gérer "l'orientation du verrou"?

Répondre

10

Je pense que c'est aussi simple que de ne pas répondre aux changements d'orientation de votre contrôleur. Vous pouvez renvoyer conditionnellement vrai ou faux en fonction des paramètres que vous avez passés, vous ne devez pas toujours retourner vrai.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    if (rand()%2 == 0) { // evaluate if I should allow rotate 
     return YES; 
    } else { 
     return NO; 
    } 
} 
+0

Merci - fonctionne très bien! – Eric

+0

Ceci est ce que je fais maintenant mais il y a un retrait: Par exemple si I ** 0. ** Le contrôleur de périphérique et de vue sont en mode portrait. ** 1. ** faire tourner l'appareil pour (disons) paysage (le contrôleur de vue tourne aussi), ** 2. ** rotation de verrouillage. ** 3. ** faire pivoter l'appareil en mode portrait (le contrôleur de vue ne tourne pas dans ce cas, ce qui est bien). ** 4. ** puis déverrouillez la rotation, le UIViewController ne se met pas à jour en mode portrait. Je dois le tourner à nouveau pour obtenir la méthode ci-dessus appelée :( – nacho4d

+0

Dans ce cas, écoutez simplement la gravité de l'accéléromètre et ajustez-vous en conséquence – slf

Questions connexes