2010-07-29 5 views
4

J'ai un petit problème en utilisant UIDeviceOrientationDidChangeNotification. Après avoir quitté un certain ViewController (la méthode viewWillDisappear: est appelée), l'appareil ne s'arrêtera pas pour envoyer des notifications. Cela signifie que, après avoir enfoncé un autre ViewController sur le dessus de la pile et que je l'ai fait pivoter, la méthode receivedRotate: du ViewController sera appelée et je ne le veux pas.UIDeviceOrientationDidChangeNotification ne s'arrêtera pas

Je ne trouve pas non plus quelque chose dans la documentation et sur d'autres sujets ici. Ce serait génial si quelqu'un pouvait aider.

Mon scénario est le suivant:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receivedRotate:) name:UIDeviceOrientationDidChangeNotification object:nil]; 

    // other things... 
} 

Voici la viewWillAppear: méthode

- (void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
} 

et enfin le viewWillDisappear: méthode

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    [[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications]; 
} 

Merci à l'avance!

Répondre

12

En -viewWillDisappear:, retirez l'observateur:

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; 
+0

Merci pour votre réponse. Cela a fonctionné avec la solution suivante: J'ai ajouté le code pour enlever l'observateur dans viewWillDisappear: mais j'ai dû ajouter l'observateur dans viewWillAppear: parce que la vue apparaîtra pour la deuxième fois, l'observateur ne sera pas ajouté. Mais encore, je ne comprends pas le sens de beginGeneratingDeviceOrientationNotifications et endGeneratingDeviceOrientationNotifications. Dans mon application, les deux n'ont aucun effet sur le déclenchement des notifications. Les notifications sont toujours renvoyées?!?! – schaechtele

+0

Toutes sortes de notifications se déclencheront pendant l'exécution de votre application, y compris celles pour les changements d'orientation. Cependant, à moins qu'une classe (z.B. un contrôleur de vue) ne se soit enregistrée pour écouter ces notifications, cette classe "n'entendra" pas une notification et n'agira pas sur elle. C'est à vous de voir comment vous personnalisez le comportement de vos classes, comment vous spécifiez comment elles réagissent aux différentes notifications au niveau du système. –

+0

@AlexReynolds: Je ne pense pas que vous avez compris le commentaire de schaechtele. La documentation de beginGeneratingDeviceNotifications indique qu'aucun événement ne sera généré sur les changements d'orientation de l'appareil sauf si vous appelez cette méthode, mais je l'ai également observé générer des notifications sans appeler cette méthode. Je suppose que c'est une chose système, si une autre application a activé les notifications d'orientation, vous les obtiendrez aussi sans appeler beginGeneratingDeviceOrientationNotifications. – hktegner