J'ai un Avez-vous déjà vu quelque chose comme ça? P> Je suis capable de recréer ce bug facilement. J'ai créé une nouvelle application de visualisation unique et j'ai simplement ajouté un bouton et une barre de navigation. Si je fais pivoter l'orientation pendant la lecture de la vidéo, appuyez sur pour activer plein écran et la barre d'état vidéo est toujours visible, lorsque la vidéo se termine, tout est bon. Mais, si j'attends la rotation après la disparition de la barre d'état vidéo, lorsque je tourne et la vidéo se termine, la barre de navigation est sous la barre d'état. Voir l'image: P> Voici le code simple que j'utilise: p> Voici où je suis actuellement avec les suggestions indiquées ci-dessous. Je dois avoir quelque chose de mal parce que malheureusement, j'ai toujours le même problème. P> Voici la méthode mpmovieplayController code> qui joue une vidéo plein écran dans le portrait ou le paysage. Si je fais pivoter l'orientation pendant la lecture et la rotation en quelques secondes après la lecture de la vidéo et la barre d'état vidéo est visible, lorsque la vidéo met fin à ma barre de navigation est parfaite. Mais si j'attends que la barre d'état vidéo disparaisse quelques secondes dans la lecture vidéo puis tournez l'orientation, lorsque la vidéo met fin à mon
Navigationbar code> est partiellement caché derrière la barre d'état, comme poussé vers le haut.
OnplayerwillexitfullfullScreen code> p>
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource: @"movie" ofType: @"mov"]];
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL: url];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(moviePlayBackDidFinish:)
name: MPMoviePlayerPlaybackDidFinishNotification
object: moviePlayer];
[[NSNotificationCenter defaultCenter]addObserver: self
selector: @selector(onPlayerWillExitFullScreen:)
name: MPMoviePlayerWillExitFullscreenNotification
object: self.moviePlayer];
moviePlayer.controlStyle = MPMovieControlStyleDefault;
moviePlayer.shouldAutoplay = YES;
[self.view addSubview: moviePlayer.view];
[moviePlayer setFullscreen: YES animated: YES];
3 Réponses :
Si vous écoutez la notification de MPMoviePlayerWillexitFullCreennotification, vous pouvez forcer vos points de vue principaux à redessiner correctement comme suit. La "fenêtre" référencée est l'objet UIWindow principal de votre application.
Lorsque MPMOVIEPlayController est passée en plein écran, elle crée une instance UIWindow distincte pour présenter la vidéo. En attrapant la notification lors de la transition de son retour, ce code assurera les vues que vous revenez correctement réalignez. P>
Certes, il ne s'agit pas d'une solution élégante, mais cela fonctionne à chaque fois. P > Pour écouter cette notification, vous devez faire quelque chose comme ça, où Self.PlayerController est votre objet MPMoviePlayController. P> N'oubliez pas d'arrêter d'écouter pour cela Notification Une fois que vous avez relâché le joueur! P> // Determine the default notification centre
NSNotificationCenter *centre = [NSNotificationCenter defaultCenter];
// Listen for interesting movie player notifications
[centre addObserver: self
selector: @selector(onPlayerWillExitFullScreen:)
name: MPMoviePlayerWillExitFullscreenNotification
object: self.playerController];
Merci pour l'aide. Je suis nouveau à la programmation pour que je ne suis donc pas certain de savoir comment mettre en œuvre cette notification mais je vais lui donner un coup. Je suis super soulagé de savoir qu'il y a une solution.
Mise à jour de ma réponse pour inclure ceci pour vous.
Je suis confus quant à l'objet UiWindow. Prenez mon application de test simple, tout ce que j'ai est une application de visualisation unique avec seulement un bouton et une barre de navigation. J'ai essayé de sous-servir de "fenêtre" avec "Self.View" mais ne doit pas être correct.
Dans votre délégué de l'application, vous aurez une référence à un objet UIWindow - c'est celui que vous voulez.
Merci pour votre formidable patience! Dans mon fichier de délégué de l'application, il fait référence à la fenêtre UIWindow * synthétisée comme fenêtre = _Window. Les deux fenêtres et _Window me donnent une erreur d'identifiant non attribuée.
Peut-être que je fais quelque chose d'autre mal. Je mets le code d'auditeur dans ma méthode de playmovie (void) et j'ai créé un - (vide) OnPlayerWillexitfulfullfull: (NSNotification *) Méthode d'anotification qui est l'endroit où j'arrise à écouter et mettre le code UIWindow ci-dessus.
Essayez UIView * View = [[[[[[[[[[UIAPPLication SharedApplication] Délégué] .Window.subviews LastObject];
Obtenez toujours une erreur avec référence à la fenêtre de la dernière ligne. '[fenêtre addsubview: vue];'
Eh bien oui, vous devrez modifier cette référence aussi :) [[[[[[[[[[UIAPPlication SharedApplication] Délégué] .Window Adpsubview: vue]
Ouais, il y a un bug dans iOS 6 sur iPhone, ce qui signifie que la notification Sortie MpmoviePlayerWill n'est pas correctement soulevée :(
OK, j'ai donc trouvé ce même bug sur mon application d'abord dans une UIWebView, puis j'ai résolu ce code dans mon contrôleur d'affichage. Bugs délicates, Corrections difficiles. P> p>
Enfin!! Merci beaucoup. Je devais jouer avec un peu mais je l'ai eu pour travailler. J'ai placé le code à l'intérieur de My - (Void) Moviefined: (NSnotification *) Anotiformation
- (void) moviePlayerWillExitFullScreen:(id)sender { [[UIApplication sharedApplication]setStatusBarHidden:NO withAnimation:NO]; } Guys try this... It works for me. I tried many other ways and only this one worked.
Vous voudrez peut-être inclure une capture d'écran ou deux.
Votre lien vers la capture d'écran est cassé.