2010-01-28 6 views
0

Je suis assez sûr que ce que je vois est comment cela est censé fonctionner, mais je suis simplement curieux de savoir pourquoi. Lorsque je fais tourner l'iPhone dans le simulateur, la méthode (voir ci-dessous) qui permet l'orientation est appelée deux fois à chaque rotation. Y a-t-il une raison à cela?iPhone, message de méthode en double après rotation du matériel?

-(BOOL)shouldAutorotateToInterfaceOrientation:interfaceOrientation 

EDIT_001

C'est ce qui est appelé lorsque l'iPhone détecte une rotation, je suis juste curieux que chaque fois que je fais une rotation dans le simulateur les déclarations NSLog impriment deux fois (la méthode s'appelle deux fois)

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

    BOOL autoRotate = NO; 

    switch(interfaceOrientation) { 
     case UIInterfaceOrientationPortrait: 
      NSLog(@"Orientation(%d): Portrait Supported", interfaceOrientation); 
      autoRotate = YES; 
      break; 
     case UIInterfaceOrientationPortraitUpsideDown: 
      NSLog(@"Orientation(%d): UpsideDown unsupported", interfaceOrientation); 
      autoRotate = NO; 
      break; 
     case UIInterfaceOrientationLandscapeLeft: 
      NSLog(@"Device: RIGHT, Interface: LEFT(%d)", interfaceOrientation); 
      autoRotate = YES; 
      break; 
     case UIInterfaceOrientationLandscapeRight: 
      NSLog(@"Device: LEFT, Interface: RIGHT(%d)", interfaceOrientation); 
      autoRotate = YES; 
      break; 
    } 
    return(autoRotate); 
} 

gary

Répondre

1

Avez-vous vérifié les arguments transmis à shouldAutorotateToInterfaceOrientation:? J'ai trouvé qu'il s'appelle un pour horizontal, et une fois pour vertical - essentiellement pour demander quelles orientations sont OK, et puis il n'est généralement pas appelé à nouveau.

Si vous faites quelque chose là que vous voulez faire à chaque fois que l'appareil est mis en rotation, je pense qu'il est beaucoup mieux d'utiliser soit willRotateToInterfaceOrientation:duration: ou écouter les notifications de rotation (via UIDeviceOrientationDidChangeNotification), et laisser shouldAutorotateToInterfaceOrientation: pour signaler que votre application permet la rotation de ce contrôleur de vue.

+0

Merci, ça pourrait être tout. Non, je n'ai aucun code que je veux lancer là-bas, je mettais juste un NSLog là pour vérifier ce qui se passait. – fuzzygoat

0

Cela se produit lorsque la vue est à l'intérieur d'un contrôleur onglet, car le contrôleur onglet appelle également la même méthode. J'espère que cela pourra aider.

-Oscar

+0

Question stupide, pouvez-vous expliquer ce qu'est le contrôleur d'onglet ou où le trouver? Désolé d'apprendre, donc pas encore familier avec toute la terminologie. – fuzzygoat

+0

Bien sûr, un contrôleur de tabulation est essentiellement un contrôleur de vue qui vous permet de basculer entre les vues. Documentation ici: http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITabBarController_Class/Reference/Reference.html Bien que si vous ne savez pas ce qu'est un contrôleur d'onglet, vous n'avez probablement pas ayez votre vue à l'intérieur d'un. Ce qui signifie que le problème est autre chose. Pourriez-vous poster une partie de votre code? –

+0

Bien sûr, le code est un peu trop verbeux car je fais juste des choses super claires pour référence future. – fuzzygoat