J'ai beaucoup de mal à afficher un film en plein écran dans mon application iPad, puis permettant à l'utilisateur de le fermer avec le bouton Terminé ou le "non-plein écran" bouton sur les commandes du lecteur.Affichage correct et rejet plein écran MPMoviePlayerController dans iOS 3.2 (iPad)
Initialement, j'utilisais MPMoviePlayerViewController
pour la présentation du film, mais je ne recevais pas les notifications plein écran d'entrée/sortie de son objet MPMoviePlayerController
, donc j'ai changé pour le faire moi-même.
Je peux faire en sorte que le film apparaisse en plein écran (bien que la transition soit joviale), mais lorsque les boutons «Terminé» ou «non-plein écran» sont pressés, aucune action n'est effectuée par le lecteur. J'ai posté mon code ci-dessous:
- (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];
}
Et voici le code pour mon rappel didFinish
- (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];
}
Alors, évidemment, je suis en train de faire quelque chose de mal, mais je suis haut et en bas de la documentation et je ne peut pas comprendre comment faire pour que le film s'en aille. Je pensais que ce serait plus intuitif que ça. Qu'est-ce que je fais mal?
Ceci est utile et je suis en mesure de quitter fullscreen maintenant lorsque l'utilisateur appuie sur fait, mais le -playbackFinished: callback n'est jamais exécuté pour moi et je ne peux pas pour la vie de moi comprendre pourquoi pas. Connaissez-vous des raisons pour lesquelles cela pourrait arriver? – jbrennan
Même quand le film joue à la fin? C'est étrange, je n'ai jamais rencontré ça. –
si MPMoviePlayerDidExitFullscreenNotification est appelée à la fois en touchant "Terminé" et en quittant le mode plein écran, comment savez-vous ce qui est appelé? Peut-être que l'utilisateur quitte uniquement l'écran plein dans ce cas, vous ne voulez pas supprimer la vue, je suppose. –