2009-06-15 3 views
2

Quelqu'un sait-il comment faire?Comment puis-je détecter une rotation sur l'iPhone sans l'autorotation du périphérique?

Je pensais que ce:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
} 

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration { 
} 

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { 
} 

- (void)willAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
} 

- (void)didAnimateFirstHalfOfRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation { 
} 

- (void)willAnimateSecondHalfOfRotationFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation duration:(NSTimeInterval)duration { 
} 

peut empêcher le dispositif de rotation (remplaçant toutes les méthodes de rotation mon UIViewController et ne pas appeler la superclasse), mais je crains que ce n'est pas le UIViewController qui effectue la rotation.

Mon UIViewController est dans un UINavigationController.

Vous avez des idées?

Cheers, Nick.

+1

Vous ne devriez pas avoir besoin de surcharger toutes ces méthodes de délégation vides, seulement celles que vous avez réellement besoin d'utiliser. L'appelant doit tester si votre sous-classe répond à une méthode particulière avant de l'appeler, que vous la définissiez ou non. C'est juste la façon dont les délégués travaillent. –

Répondre

20

Vous pouvez vous inscrire à la notification UIDeviceOrientationDidChangeNotification (de UIDevice.h), et puis quand vous vous souciez de changements d'orientation appeler cette méthode:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 

Lorsque vous ne se soucient plus des changements d'orientation, appelez cette méthode:

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; 

La notification vous sera envoyée le cas échéant, et vous pouvez vérifier [UIDevice currentDevice].orientation pour connaître l'orientation actuelle.

+0

Merci - c'est exactement ce que je recherchais! –

+0

L'effet secondaire est que l'appareil ne va plus dormir. – drvdijk

1

Vous retournez YES de shouldAutorotateToInterfaceOrientation:, que je soupçonne que vous ne vouliez pas faire. C'est la seule méthode que vous devez implémenter pour empêcher le périphérique de tourner.

Pour obtenir l'orientation actuelle de l'appareil, vous pouvez utiliser [[UIDevice currentDevice] orientation].

+0

Salut, merci pour votre suggestion! [[UIDevice currentDevice] orientation] obtiendra l'orientation actuelle - mais je dois détecter quand cela se produit sans que le téléphone tourne automatiquement. Si je renvoie NO à partir de shouldAutorotateToInterfaceOrientation, aucune des fonctions déléguées n'est appelée, ce qui me permet de perdre la possibilité de détecter la rotation. Est-ce que quelqu'un d'autre a des idées? Cheers, Nick. –

4

Sur une note de côté shouldAutoRotateToInterfaceOrientation utilisé pour être appelé sur l'heure de rotation dans 2.x, mais dans 3.0, il est beaucoup moins cohérent. La notification mentionnée dans l'autre poste est la façon d'obtenir une indication fiable de la rotation.

+0

Merci Kendall pour le pourboire! N –

Questions connexes