2010-11-11 2 views
5

Selon MPMoviePlayerController doc Apple:MPMoviePlayerPlaybackDidFinishNotification est appelé quand il ne doit pas

MPMoviePlayerPlaybackDidFinishNotification - Cette notification n'est pas envoyé dans les cas où le lecteur vidéo affiche en mode plein écran et l'utilisateur tape sur le bouton Terminé.

Il me semble que c'est complètement faux. En utilisant le code ci-dessous, playerPlaybackDidFinish est appelé quand j'appuie sur le bouton done.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerPlaybackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.player]; 

- (void) playerPlaybackDidFinish:(NSNotification*)notification 
{ 
    NSLog(@"WHY?"); 
    self.player.fullscreen = NO; 
} 

Je dois faire la distinction entre l'utilisateur appuyant sur le bouton Terminé et le film finissant tout au long de la lecture. playerPlaybackDidFinish est appelé lorsque le film se termine, mais comme je l'ai dit, il est également appelé lorsque vous appuyez sur Terminé.

+0

ne pouvez-vous ca faire l'événement sur le bouton terminé? –

+0

Je ne pense pas. Cela fait partie de MPMoviePlayer et il n'y a pas de rappel pour cela. – sol

+0

Je suis la même situation, s'il vous plaît aider! –

Répondre

2

Lorsque vous recevez la notification, vous pouvez vérifier le paramètre endPlaybackTime du lecteur. Si c'est -1 alors le film se termine naturellement.

Pour le contenu diffusé en continu, vous pouvez vérifier MPMoviePlayerPlaybackDidFinishReasonUserInfoKey à l'intérieur du userInfo sur MPMoviePlayerPlaybackDidFinishNotification.

S'il est égal à MPMovieFinishReasonUserExited, l'utilisateur arrête de lire le contenu.

+0

juste essayé cela. self.player.endPlaybackTime est -1 si vous fermez via le bouton Terminé ou s'il est joué tout le long. Vérifié la documentation - "Cette propriété n'est pas applicable pour le contenu diffusé." – sol

+0

Oh je ne suis pas au courant que vous parlez de contenu en streaming .... J'ai révisé ma réponse – Nevin

+2

Cela semble être une bonne idée, mais si ([[notification userInfo] objectForKey: @ "MPMoviePlayerPlaybackDidFinishReasonUserInfoKey"] intValue] == MPMovieFinishReasonUserExited) renvoie toujours false, que je clique sur Terminé ou que l'utilisateur se termine naturellement. – sol

22

Voici comment vérifier l'MPMoviePlayerPlaybackDidFinishReasonUserInfoKey qui fait partie de la notification de MPMoviePlayerPlaybackDidFinishNotification

- (void) playbackDidFinish:(NSNotification*)notification { 
    int reason = [[[notification userInfo] valueForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue]; 
    if (reason == MPMovieFinishReasonPlaybackEnded) { 
     //movie finished playin 
    }else if (reason == MPMovieFinishReasonUserExited) { 
     //user hit the done button 
    }else if (reason == MPMovieFinishReasonPlaybackError) { 
     //error 
    } 
} 
0

Assurez-vous que pour

moviePlayer.repeatMode = MPMovieRepeatModeNone; 
3

J'utilise ce qui suit pour faire quelque chose quand un film est joué le chemin à la fin:

- (void)playbackDidFinish:(NSNotification*)notification 
{ 
    BOOL playbackEnded = ([[[notification userInfo] valueForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue] == MPMovieFinishReasonPlaybackEnded); 
    BOOL endReached = (self.player.currentPlaybackTime == self.player.playableDuration); 

    if (playbackEnded && endReached) { 
     // Movie Ended 
    } 
} 
Questions connexes