2012-12-18 1 views
1

Je souhaite détecter l'orientation actuelle de l'appareil.Enregistrement pour UIDeviceOrientation

Alors, je la ligne de code

Note: Il me donne l'orientation même si je l'enregistre pas

-(IBAction) deviceOrientationChanged:(id) sender{ 
    NSLog(@"Device Orientation= %d",[[UIDevice currentDevice] orientation]); 
} 

Quand je change l'orientation, sur un bouton événement click je reçois l'orientation de l'appareil.

Mais, le document dit que vous devez d'abord l'enregistrer, puis utilisez le code ci-dessus.

Remarque: Dans le code ci-dessous j'ai appareil enregistré pour recevoir une notification d'orientation de l'appareil

-(IBAction) deviceOrientationChanged:(id) sender{ 

    if(![[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications]){ 
     //This statement is called very time when I click on the button. I expected to execute only once. 
     [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
    } 
    NSLog(@"Device Orientation= %d",[[UIDevice currentDevice] orientation]); 
} 

Donc, je ne suis pas en mesure passer à travers le moyen idéal pour obtenir l'orientation de l'appareil.

Répondre

0

Vous ne pouvez pas empêcher l'appareil de générer des notifications de rotation UIViewController. Voir la question here.

A quoi correspond le document auquel vous vous êtes référé, NSNotificationCenter.

+0

Il est écrit "La valeur de cette propriété renvoie toujours 0, sauf si les notifications d'orientation ont été activées en appelant beginGeneratingDeviceOrientationNotifications." où property fait référence à la propriété "orientation" de UIDevice – andyPaul

1

Je pense que votre condition est incorrecte; U ont comme si ([[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications]) Il devrait être

si (! [[UIDevice currentDevice] isGeneratingDeviceOrientationNotifications])

+0

Thnks, j'ai corrigé le code mais, maintenant, il n'entrait pas dans la condition if pour enregistrer le périphérique. Je ne sais pas pourquoi ça retourne VRAI. J'ai vérifié dans tout mon code, il n'y a aucun autre endroit où je m'inscris de l'orientation de l'appareil. – andyPaul

+0

L'enregistrement des notifications est différent de la génération des notifications. Normalement, si vous envisagez d'utiliser des notifications d'orientation de périphérique dans le délégué de l'application ou dans un emplacement approprié, vous lancerez l'appel beginGeneratingDeviceOrientationNotifications sur l'UIDevice et vous définirez finGeneratingDeviceOrientationNotifications dans un autre emplacement approprié lorsque vous n'avez plus besoin des notifications.Ceci est seulement la configuration initiale pour la notification deviceOrientaion. – Siby

1

Enregistrement des notifications est différent de générer les notifications . Normalement, si vous envisagez d'utiliser des notifications d'orientation de périphérique dans le délégué de l'application ou dans un emplacement approprié, vous lancerez l'appel beginGeneratingDeviceOrientationNotifications sur l'UIDevice et vous définirez finGeneratingDeviceOrientationNotifications dans un autre emplacement approprié lorsque vous n'avez plus besoin des notifications. Ceci est seulement la configuration initiale pour la notification deviceOrientaion.

Pour obtenir cette notification est dans vos contrôleurs ou objet U nous avoir le centre de notifications. U vous inscrire à la notification UIDeviceOrientationDidChangeNotification. [[NSNotificationCenter defaultCenter] addObserver: sélecteur de myObject: @selector (deviceRotated:) Nom: objet UIDeviceOrientationDidChangeNotification: nil]

et le retirer du centre de notification lorsque U ne avez pas besoin ou dans la dealloc de l'objet.

Questions connexes