Tengo muchos problemas para mostrar una película a pantalla completa en mi aplicación de iPad y luego permitir que el usuario la cierre con el botón Listo o la "pantalla completa" botón en los controles del jugador.Visualizar y rechazar correctamente MPMoviePlayerController en pantalla completa en iOS 3.2 (iPad)
Inicialmente estaba usando MPMoviePlayerViewController
para la presentación de la película, pero no recibía las notificaciones de pantalla completa de entrada/salida desde su objeto MPMoviePlayerController
, así que cambié a hacerlo yo mismo.
Puedo hacer que la película aparezca a pantalla completa (aunque la transición es janky), pero cuando se presionan los botones "Hecho" o "Pantalla completa", el jugador no toma ninguna medida. He publicado mi código de abajo:
- (void)startPlayingMovieWithURLString:(NSString *)movieURLString {
// I get all of these callbacks **EXCEPT** the "willExitFullScreen:" callback.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterFullScreen:) name:MPMoviePlayerWillEnterFullscreenNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willExitFullScreen:) name:MPMoviePlayerWillExitFullscreenNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishPlayback:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
[self.moviePlayerController setContentURL:someExistingURL];
// "self" is a UIViewController subclass, and is presented as a "fullscreen" modal view controller from its parent
// I'm setting the movie player's view's frame to take up the full rectangle of my view controller, but really I want the movie to be completely removed when the user presses "done" (that is, removed from the view hierarchy). Not sure when/where to do this.
self.moviePlayerController.view.frame = self.view.frame;
[self.view addSubview:self.moviePlayerController.view];
[self.moviePlayerController setFullscreen:YES animated:YES];
}
Y aquí está el código de mi didFinish devolución de llamada
- (void)didFinishPlayback:(NSNotification *)notification {
// This ends up recursively telling the player that playback ended, thus calling this method, thus…well you get the picture.
// What I'm trying to do here is just make the player go away and show my old UI again.
[self.moviePlayerController setFullscreen:NO animated:YES];
}
Así que, obviamente estoy haciendo algo mal, pero he estado arriba y abajo de la documentación y yo no puede entender cómo hacer que la película simplemente se vaya. Pensé que sería más intuitivo que esto. ¿Qué estoy haciendo mal?
Esto es útil y ahora puedo salir de pantalla completa cuando el usuario presiona, sin embargo, la reproducción finalizada: la devolución de llamada nunca se ejecuta para mí y no puedo entender por qué no. ¿Conoces alguna razón por la que esto podría suceder? – jbrennan
¿Incluso cuando la película se reproduce hasta el final? Eso es extraño, nunca me he encontrado con eso. –
si se llama a MPMoviePlayerDidExitFullscreenNotification al tocar "Listo" y al salir de la pantalla completa, ¿cómo sabe a qué se llama? Tal vez el usuario solo salga de la pantalla completa, en cuyo caso no quiere quitar la vista, supongo. –