2011-12-01 10 views
5

Mam problem z MPMoviePlayerViewController, gdy aplikacja wchodzi w tle, a następnie uruchomię go ponownie lub przejść inny viewControllers film stał się czarny! Mam film, który odgrywa w tle mojego menu, tutaj jest mój kod:MPMoviePlayerViewController staje się czarny po wejściu w tło

EIDTED KOD:

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

dziękuję.

+0

Czy funkcja "movieFinishedPlaying" jest wywoływana, gdy aplikacja przechodzi w tło? Jeśli nie wiesz, ustaw punkt przerwania (lub użyj NSLog do konsoli) i dowiedz się. –

+0

kiedy przełączam między viewController tak. kompilator pokaże mi wiadomość NSLog –

Odpowiedz

3

myślę, że może trzeba dodać kody poniżej:

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

i obsługuj m ovie state w metodzie moviePlayBackStateChange. Film zostanie wstrzymany, gdy film jest odtwarzany, a aplikacja wchodzi w tle, więc po przywróceniu aplikacji z tła musisz ją przywrócić jak poniżej. Jeśli nie, film zachowa stan pauzy. Dlatego twoja aplikacja staje się czarna.

[[player moviePlayer] play]; 

to film będzie nadal odtwarzany. dodanie dwóch metod, które należy invote gdy aplikacja wchodzi w tle i plecach z tła:

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

nadzieję, że może to pomóc facet.

+0

dziękuję gdzie powinienem umieścić ten kod? '[[player moviePlayer] play];' na twoim ekranie powinienem zobaczyć mój kod ... ponieważ mam ten sam problem ... po zmianie widoku mój film stał się czarny! –

+0

widoki zmieniają się za pomocą kontrolera presentmodalview, a następnie odsuwają od innych widoków –

+0

. Czy mógłbyś ponownie rozważyć moje kody? Naprawdę potrzebuję tej odpowiedzi –

1

Spróbuj zmienić to:

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

do tego:

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

sprawdzić, czy to działa: D

+0

teraz pojawi się biały ekran z powodu removeFromSuperview! –

+0

jakaś sugestia? –

+0

Czy zastępujesz usunięty widok jakimkolwiek innym widokiem? Jeśli nie, to by to wyjaśniło. Upewnij się, że używasz "[viewController addSubview: newView];" ale zastąp viewController i newView własnymi widokami –

Powiązane problemy