MPMoviePlayer не исчезает в [moviePlayer.view removeFromSuperview] и [moviePlayer release] - PullRequest
1 голос
/ 26 июня 2011

У меня проблема с MPMoviePlayerController. Когда я смотрю видео и нажимаю кнопку «Готово» в левой верхней части, MoviePlayer не исчезает, даже если кажется, что код вызывается:

   NSURL *url = [NSURL URLWithString:article.enclosureLink];    

    MPMoviePlayerController *moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:url];  

    // Set movie player layout
    [moviePlayer setControlStyle:MPMovieControlStyleFullscreen];
    [moviePlayer setFullscreen:YES];

    // May help to reduce latency
    [moviePlayer prepareToPlay];

    // Register to receive a notification when the movie has finished playing.      
    [[NSNotificationCenter defaultCenter] addObserver:self  
                                             selector:@selector(moviePlayBackDidFinish:)  
                                                 name:MPMoviePlayerPlaybackDidFinishNotification  
                                               object:moviePlayer];  

    [[NSNotificationCenter defaultCenter] addObserver:self  
                                                 selector:@selector(movieReadyToPlay:)  
                                                     name:MPMoviePlayerLoadStateDidChangeNotification  
                                                   object:moviePlayer];

И селекторы:

- (void) movieReadyToPlay:(NSNotification*)notification {
    MPMoviePlayerController *moviePlayer = [notification object];  

    if(moviePlayer.loadState == MPMovieLoadStatePlayable){
        [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerLoadStateDidChangeNotification object:moviePlayer];         
        moviePlayer.controlStyle = MPMovieControlStyleFullscreen;  
        //moviePlayer.shouldAutoplay = YES; 
        [self.view addSubview:moviePlayer.view];  
        [moviePlayer setFullscreen:YES animated:YES];  
        [moviePlayer play];
    }

}

- (void) moviePlayBackDidFinish:(NSNotification*)notification {  
    MPMoviePlayerController *moviePlayer = [notification object];  
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];  

    [moviePlayer setFullscreen:NO animated:YES];  
    [moviePlayer.view removeFromSuperview];  
    [moviePlayer release];

    NSLog(@"Finished movie!");
} 

Мне кажется, это очень простой код, но я должен сделать глупую ошибку. NSLog показывает, что функция вызывается, но игрок остается там, где она есть, и от нее невозможно избавиться.

Кроме того, сам факт того, что плеер все еще работает после предполагаемого выпуска, похоже, указывает на то, что есть что-то фундаментальное неправильно, я просто не вижу, что.

Есть кто-нибудь, у кого есть предложение?

[Обновление:] Странно в симуляторе iPhone все работает отлично!

[Update2:] Я попробовал и создал определенный UIviewcontroller, хотя я не хочу делать это, так как анимация не очень приятная. Но я узнал, что у меня та же проблема. Похоже, что-то нужно было сделать с увольнением игрока, но это началось снова.

Когда я ставлю [self.moviePlayer setFullscreen: YES animated: YES]; в viewDidApear и нажмите кнопку «Готово» в плеере, проигрывателе, видео начинается снова, когда я нажимаю кнопку «Готово» (снова вызывается viewDidAppear). Итак, что-то срабатывает, так что мне кажется, чтобы видео началось снова.

Если я поставлю это viewDidLoad, то система работает, но графика перепутана и запутана ...

Любая помощь очень, очень ценится, так как я трачу на это два дня, не задумываясь об этом!

Ответы [ 2 ]

2 голосов
/ 18 апреля 2013

Для меня я попробовал все это: [moviePlayer stop]; [moviePlayer setContentURL:nil]; [moviePlayer.view removeFromSuperview]; moviePlayer = nil;

И ничего не получалось. Я понял, что это связано с тем, что мой MPMoviePlayerController работает в полноэкранном режиме. Исправление?

        [moviePlayer setFullscreen:NO animated:YES];
1 голос
/ 28 июня 2011

Добавление

[moviePlayer stop]  

до

 [moviePlayer.view removeFromSuperview]

может работать.

Обновление : если это не сработает, попробуйте установить controlstyle в MPMovieControlStyleNone перед удалением подпредставления. В большинстве случаев controlStyle вызывает такие проблемы.

...