2011-12-01 35 views
5

Tengo un problema con MPMoviePlayerViewController, cuando la aplicación entra en segundo plano y luego la lance de nuevo o ve otra viewControllers ¡la película se volvió negra! Tengo película, que juega en el fondo de mis menús, aquí está mi código:MPMoviePlayerViewController se vuelve negro cuando entra en el fondo

EIDTED CÓDIGO:

-(void)viewDidLoad { 
     [self moviePlayer2]; 
    } 

    - (void) moviePlayer2 { 



    NSString *path = [[NSBundle mainBundle] pathForResource:@"cloud" ofType:@"mp4"]; 
    player = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL fileURLWithPath:path]]; 
    player.view.userInteractionEnabled = YES;  
    player.moviePlayer.repeatMode = YES; 
    player.moviePlayer.scalingMode = MPMovieScalingModeFill; 
    player.moviePlayer.controlStyle = MPMovieControlStyleNone; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlayBackStateChange:) 
               name:MPMoviePlayerPlaybackStateDidChangeNotification 
               object:[player moviePlayer]]; 

    [[player moviePlayer] play]; 

    [self.view addSubview:player.view]; 

} 


-(void) moviePlayBackStateChange: (NSNotification *) note { 

    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackStateDidChangeNotification object:[player moviePlayer]]; 

    [[player moviePlayer] play]; 

    //[player release]; 
    NSLog(@"FINISHED"); 
} 

gracias.

+0

¿Se llama a 'movieFinishedPlaying' cuando su aplicación pasa a segundo plano? Si no lo sabe, establezca un punto de interrupción (o use un NSLog en la consola) y descubra. –

+0

cuando cambio entre viewControllers sí. compilador muéstrame el mensaje NSLog –

Respuesta

3

Creo que es posible que tenga que añadir los códigos a continuación:

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(moviePlayBackStateChange:) 
               name:MPMoviePlayerPlaybackStateDidChangeNotification 
               object:[player moviePlayer]]; 

y manejar el m ovie state en el método moviePlayBackStateChange. La película se pausará cuando se reproduzca la película y la aplicación entre en segundo plano, por lo que tendrá que reanudar la película como se muestra a continuación cuando la aplicación regrese del fondo. De lo contrario, la película mantendrá el estado de pausa. Es por eso que tu aplicación se vuelve negra.

[[player moviePlayer] play]; 

continuación, la película seguirá jugando. la adición de dos métodos que usted debe invote cuando la aplicación entra en el fondo y la espalda de fondo:

-(void) pauseMovieInBackGround 
{ 
    [player moviePlayer] pause]; 
    [player.view removeFromSuperview]; 
} 
-(void) resumeMovieInFrontGround 
{ 
    [self.view addSubview:player.view]; 
    [[player moviePlayer] play]; 
} 

Esperamos que esto pueda ayudar a chico.

+0

gracias ¿dónde debería poner este código? '[[player moviePlayer] play];' en caso de que veas mi código editado ... porque tengo el mismo problema ... ¡después de cambiar de vista mi película se volvió negra! –

+0

las vistas cambian con el controlador presentmodalview y luego se rechazan desde otras vistas –

+0

¿podría considerar mis códigos? Realmente necesito esta respuesta –

1

Intente cambiar esto:

[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:[player moviePlayer]]; 
[player release]; 

A esto:

[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:[player moviePlayer]]; 
[movieController.view removeFromSuperview]; 
[player release]; 

ver si funciona: D

+0

ahora aparece una pantalla en blanco debido a removeFromSuperview! –

+0

alguna sugerencia? –

+0

¿Está reemplazando la vista eliminada con cualquier otra vista? Si no, eso lo explicaría. Asegúrese de utilizar "[viewController addSubview: newView];" pero reemplace viewController y newView con sus propias vistas –

Cuestiones relacionadas