单击"完成"时,MPMoviePlayerController不会删除视图

Ana*_*and 7 iphone mpmovieplayercontroller

我正在创建一个MPMoviePlayerController对象并以全屏模式传输视频.

我正在使用UIViewController来显示电影视图.

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    //http://www.youtube.com/watch?feature=player_detailpage&v=ebeQaznNcmE
    NSURL *url = [NSURL URLWithString:@"http://a1408.g.akamai.net/5/1408/1388/2005110405/1a1a1ad948be278cff2d96046ad90768d848b41947aa1986/sample_mpeg4.mp4"];
    MPMoviePlayerController *mPlayer = [[MPMoviePlayerController alloc]initWithContentURL:url]; 
    mPlayer.view.frame = gMainView.frame;

    [[NSNotificationCenter defaultCenter] addObserver:self
                                            selector:@selector(moviePlayBackDidFinish:)
                                            name:MPMoviePlayerPlaybackDidFinishNotification
                                            object:mPlayer];
    mPlayer.shouldAutoplay = YES;
    mPlayer.controlStyle = MPMovieControlStyleFullscreen;
    [gMainView addSubview:mPlayer.view];
    [mPlayer prepareToPlay];
    [mPlayer setFullscreen:YES animated:YES];
    [mPlayer play];
}


- (void)moviePlayBackDidFinish:(NSNotification*)notification {
    int reason = [[[notification userInfo] valueForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue];
    if (reason == MPMovieFinishReasonPlaybackEnded) {
        //movie finished playing
    }
    else if (reason == MPMovieFinishReasonUserExited) {
        //user hit the done button
        MPMoviePlayerController *moviePlayer = [notification object];

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

        if ([moviePlayer respondsToSelector:@selector(setFullscreen:animated:)]) {
            [moviePlayer.view removeFromSuperview];
        }
        [moviePlayer release];
    }
    else if (reason == MPMovieFinishReasonPlaybackError) {
        //error
    }
}
Run Code Online (Sandbox Code Playgroud)

单击完成后,视频视觉将从屏幕中删除,但控件不会从屏幕中删除,并且视图不会从屏幕中删除.

控件确实是"//用户点击完成按钮".它执行代码以从superview中删除视图,我通过添加日志进行检查,但是控件不会从屏幕上删除,并且视图不会从屏幕中删除.我究竟做错了什么?

编辑:

如果我使用MPMoviePlayerViewController,它甚至不会等我按下完成.视频完成后,它会自动删除视图.但我不想要那个.

编辑:

如果我删除"[mPlayer setFullscreen:YES animated:YES]",则单击"完成"时,视图将被完全删除.但是视频没有全屏显示,状态栏变为灰色,这也是我不想要的.

小智 10

以下代码对我有用,希望它也能帮到你.

-(IBAction)playVedio:(id)sender{
mp = [[MPMoviePlayerViewController alloc] initWithContentURL:url];

    [[mp moviePlayer] prepareToPlay];
    [[mp moviePlayer] setUseApplicationAudioSession:NO];
    [[mp moviePlayer] setShouldAutoplay:YES];
    [[mp moviePlayer] setControlStyle:2];
    [[mp moviePlayer] setRepeatMode:MPMovieRepeatModeOne];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoPlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
    [self presentMoviePlayerViewControllerAnimated:mp];

}

-(void)videoPlayBackDidFinish:(NSNotification*)notification  {

    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil];

    [mp.moviePlayer stop];
    mp = nil;
    [mp release];
    [self dismissMoviePlayerViewControllerAnimated];  
}
Run Code Online (Sandbox Code Playgroud)

  • 你不应该假装公然投票. (4认同)