2010-05-20 4 views
3

J'ai du mal à faire en sorte que cela fonctionne, et le forum Apple Developer n'a été d'aucune aide.La barre d'état de l'iPad se coince après la rotation pendant la lecture de la vidéo

J'ai une application qui lit la vidéo et quand les moviecontrols sont affichés et l'iPad est tourné, la barre d'état colle à l'orientation que la vidéo était avant que l'orientation commence. Ensuite, il y a un écart de 20px en haut de la vue tandis que la barre d'état est dans une autre orientation.

Quelqu'un a-t-il déjà vu ce problème?

Toute aide serait grandement appréciée.

+0

Apparemment, cet utilisateur appartient à Super User. – Noldorin

Répondre

2

J'ai eu le même problème, plus ma vue était encore foiré après le retour du lecteur vidéo en mode fenêtré. Je ne sais pas comment résoudre ce problème lors de la lecture en plein écran, mais au moins, après retour en vous fenêtré pouvez fixer la barre d'état comme celui-ci:

  • enregistrer un observateur MPMoviePlayerWillExitFullscreenNotification
  • dans la fonction de rappel de notification , lancer une NSTimer d'appeler une autre fonction d'un bit (par exemple 0,1 s) plus tard
  • en fonction de minuterie faire

    [[UIApplication sharedApplication] setStatusBarOrientation: [[UIDevice currentDevice] orientation] animé: NO];

2

J'ai eu le même problème:

  • application de démarrage en mode portrait (par exemple)
  • lecteur vidéo de lancement (le nôtre est illustrée à l'aide presentModalViewController).
  • Rotation de l'iPad
  • Quittez la vidéo en appuyant sur Terminé.

Bam! La disposition de notre application est cassée (nous faisons une mise en page personnalisée pour chaque orientation), et la barre d'état est au mauvais endroit, bien qu'elle soit au bon endroit en vidéo.

J'ai fait deux choses à régler les deux problèmes:

  • assurer que notre configuration personnalisée, ce qui se fait dans viewWillAppear, se fait après l'appel [super viewWillAppear];.
  • mettre en œuvre des observateurs pour MPMoviePlayerDidExitFullscreenNotification et MPMoviePlayerPlaybackDidFinishNotification (le premier n'a jamais été appelé en cliquant sur «Terminé» dans mon cas).

Le code pour le rappel de l'observateur regarde comme ceci:

[self performSelector: @selector(checkAndFixStatusBar) 
      withObject: nil 
      afterDelay: 0]; 

[[NSNotificationCenter defaultCenter] removeObserver: self]; 

Et la dernière méthode, appelée après un 0 retard intentionnel:

- (void)checkAndFixStatusBar 
{ 
    UIInterfaceOrientation intOrient = self.interfaceOrientation; 
    UIInterfaceOrientation sbOrient = [[UIApplication sharedApplication] statusBarOrientation]; 

    if (intOrient != sbOrient) 
    { 
     [[UIApplication sharedApplication] setStatusBarOrientation: intOrient animated: NO]; 
     NSLog(@"Fixed status bar orientation"); 
    } 
} 

Il y a encore un clignotement percevable de la barre d'état, mais c'est le meilleur que j'ai trouvé.

Espérons que cela aide.

EDIT: J'ai supprimé l'étape performSelector, et appelé directement la configuration de la barre d'état, dans mon cas, cela ne fait aucune différence notable (toujours clignotant).

Questions connexes