Ho un oggetto MPMoviePlayerController
che riproduce un video a schermo intero in verticale o orizzontale. Se ruoto l'orientamento mentre il video è in riproduzione e faccio la rotazione entro pochi secondi dopo l'inizio della riproduzione del video e la barra di stato del video è visibile, quando il video termina la mia barra di navigazione è perfetta. Ma se aspetto che la barra di stato del video scompaia alcuni secondi nella riproduzione del video e quindi ruoti l'orientamento, quando il video termina il mio navigationBar
è parzialmente nascosto dietro la barra di stato, come spinto verso l'alto.Comportamento estremamente strano della navigazioneBar e MPMoviePlayerController. Bug in iOS o il mio errore?
Hai mai visto qualcosa del genere?
Sono in grado di ricreare facilmente questo errore. Ho creato una nuova app Single View e ho semplicemente aggiunto un pulsante e una barra di navigazione. Se ruoto l'orientamento mentre il video è in riproduzione, tocca per attivare la modalità a schermo intero e la barra di stato del video è ancora visibile, quando il video termina, tutto va bene. Ma, se aspetto di ruotare dopo che la barra di stato del video scompare, quando ruoto e il video finisce, la barra di navigazione è sotto la barra di stato. Vedi immagine:
Ecco il semplice codice che sto usando:
- (void) playMovie {
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];
moviePlayer.controlStyle = MPMovieControlStyleDefault;
moviePlayer.shouldAutoplay = YES;
[self.view addSubview: moviePlayer.view];
[moviePlayer setFullscreen: YES animated: YES];
- (void) moviePlayBackDidFinish: (NSNotification *) notification
MPMoviePlayerController *player = [notification object];
[[NSNotificationCenter defaultCenter] removeObserver: self
name: MPMoviePlayerPlaybackDidFinishNotification
object: player];
if ([player respondsToSelector: @selector(setFullscreen:animated:)])
{
[player.view removeFromSuperview];
}
Ecco dove mi trovo attualmente con i suggerimenti dati qui di seguito. Devo avere qualcosa di sbagliato perché sfortunatamente ho ancora lo stesso problema.
Ecco il metodo onPlayerWillExitFullScreen
UIView *view = [[[UIApplication sharedApplication] delegate].window.subviews lastObject];
if (view) {
[view removeFromSuperview];
[[[UIApplication sharedApplication] delegate].window addSubview:view];
}
MPMoviePlayerController *player = [aNotification object];
[[NSNotificationCenter defaultCenter] removeObserver: self
name: MPMoviePlayerWillExitFullscreenNotification
object: player];
e qui è la mia attuale playMovie
metodo:
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];
È possibile includere uno o due screenshot. –
Grazie Jeff per il suggerimento. –
Il tuo link allo screenshot è rotto. – JonasCz