2011-12-01 18 views
5

Ho un problema con MPMoviePlayerViewController, quando l'app entra in background e poi la lancio di nuovo o passa a un'altra vista. Il film è diventato nero! Ho filmato, che si sente in sottofondo dei miei menu, qui è il mio codice:MPMoviePlayerViewController diventa nero quando entra in background

EIDTED CODICE:

-(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"); 
} 

grazie.

+0

viene chiamato 'movieFinishedPlaying' quando l'app viene messa in secondo piano? Se non lo sai, imposta un breakpoint (o usa un NSLog sulla console) e scoprilo. –

+0

quando passo tra viewControllers si. compiler mi mostra il messaggio NSLog –

risposta

3

Penso che potrebbe essere necessario aggiungere codici di seguito:

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

e gestire la m stato ovie nel metodo moviePlayBackStateChange. Il film verrà messo in pausa quando il film è in riproduzione e l'app entra in background, quindi è necessario riprendere il film come di seguito quando l'app torna dallo sfondo. In caso contrario, il film manterrà lo stato di pausa. Ecco perché la tua app diventa nera.

[[player moviePlayer] play]; 

poi il film continuerà a svolgere. l'aggiunta di due metodi che si dovrebbe invote quando l'applicazione è in background e spalle da sfondo:

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

Spero che questo ti può aiutare ragazzo.

+0

grazie dove dovrei inserire questo codice? '[[player moviePlayer] suona];' per favore vedi il mio codice modificato ... perché ho lo stesso problema ... dopo aver cambiato visualizzazione il mio film è diventato nero! –

+0

le viste cambiano con il controller presentmodalview e quindi dissocia da altre viste –

+0

, ti piacerebbe prendere in considerazione i miei codici? Ho davvero bisogno di questa risposta –

1

Provare a cambiare questo:

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

A tal:

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

vedere se funziona: D

+0

ora appare una schermata bianca a causa di removeFromSuperview! –

+0

qualche suggerimento? –

+0

Stai sostituendo la vista rimossa con un'altra vista? Altrimenti, questo lo spiegherebbe. Assicurati di usare "[viewController addSubview: newView];" ma sostituisci viewController e newView con le tue viste –

Problemi correlati