2010-11-11 58 views
5

debería Según doc MPMoviePlayerController de Apple:MPMoviePlayerPlaybackDidFinishNotification se llama cuando no

MPMoviePlayerPlaybackDidFinishNotification - Esta notificación no se envía en caso de que el reproductor de películas está mostrando en modo de pantalla completa y el usuario pulsa el botón Hecho.

Me parece que esto está completamente mal. Usando el siguiente código, se llama a playerPlaybackDidFinish cuando toco el botón hecho.

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

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

Necesito distinguir entre que el usuario toque el botón hecho y el final de la película hasta la reproducción. playerPlaybackDidFinish recibe una llamada cuando la película termina, pero como dije, también se llama cuando toca Hecho.

+0

no se puede ca pture el evento en el botón hecho? –

+0

No lo creo. Es parte de MPMoviePlayer y no hay devolución de llamada. – sol

+0

Estoy teniendo la misma situación, ¡ayúdenme! –

Respuesta

2

Cuando reciba la notificación, puede verificar el tiempo de reproducción final del reproductor. Si es -1, entonces la película terminó todo el camino de regreso, naturalmente.

Para contenido transmitido, puede consultar MPMoviePlayerPlaybackDidFinishReasonUserInfoKey dentro de userInfo en MPMoviePlayerPlaybackDidFinishNotification.

Si es igual a MPMovieFinishReasonUserExited, entonces el usuario deja de reproducir el contenido.

+0

acaba de probar eso. self.player.endPlaybackTime es -1 si se cierra mediante el botón Hecho o si se reproduce hasta el final. Verificó la documentación: "Esta propiedad no se aplica al contenido transmitido por secuencias". – sol

+0

Oh, no soy consciente de que estás hablando de contenido transmitido ... He revisado mi respuesta – Nevin

+2

Parece una gran idea, pero si ([[[notificación userInfo] objectForKey: @ "MPMoviePlayerPlaybackDidFinishReasonUserInfoKey"] intValue] == MPMovieFinishReasonUserExited) siempre devuelve falso, ya sea que haga clic en Listo o si el usuario finaliza naturalmente. – sol

22

Aquí es cómo se comprueba la MPMoviePlayerPlaybackDidFinishReasonUserInfoKey que es parte de la notificación 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

Asegúrese de

moviePlayer.repeatMode = MPMovieRepeatModeNone; 
3

Estoy utilizando el siguiente para hacer algo cuando una película se juega en todo el camino hasta el final:

- (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 
    } 
} 
Cuestiones relacionadas