如何解除MPMoviePlayer中的子视图?

时间:2012-11-20 20:36:12

标签: mpmovieplayercontroller xcode4.5 subview addsubview mpmovieplayer

我有一个在发布时自动播放的视频。短片完成后会显示黑屏。我想解雇子视图以显示图像或自动加载另一个控制器?

以下是我的代码:

 (void)viewDidLoad

 {

    {
    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                         pathForResource:@"cover" ofType:@"mp4"]];

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



    player.movieSourceType = MPMovieSourceTypeFile;

    [player setControlStyle:MPMovieControlStyleNone];

    player.view.frame = CGRectMake(0, 0, 768, 960);

    [self.view addSubview:player.view];
    [player play];


    player = nil;

}

感谢您的帮助..我是这方面的新手。

1 个答案:

答案 0 :(得分:0)

几周前我发现了很多这个问题。查看可用的通知。 http://developer.apple.com/library/ios/#documentation/mediaplayer/reference/MPMoviePlayerController_Class/Reference/Reference.html

将类似内容添加到viewDidLoad:

// Remove the movie player view controller from the "playback did finish" notification observers
[[NSNotificationCenter defaultCenter] removeObserver:_moviePlayer
                                                name:MPMoviePlayerPlaybackDidFinishNotification
                                              object:_moviePlayer];
// Register this class as an observer instead
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(movieFinishedCallback:)
                                             name:MPMoviePlayerPlaybackDidFinishNotification
                                           object:_moviePlayer];

现在您有了一种可以重新添加视图,缩略图或其他内容的方法:

- (void)movieFinishedCallback:(NSNotification*)aNotification
{   
    // Obtain the reason why the movie playback finished
    NSNumber *finishReason = [aNotification userInfo][MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];

    if ([finishReason intValue] == MPMovieFinishReasonPlaybackEnded) {

       [self.view addSubview:self.moviePlayer.view];
    }

(这段代码是从我的项目中动态调整的,可能需要考虑适应!)

MPMoviePlayerController有很多通知在电影播放,暂停,停止,完成等时被触发。您可以将代码添加到这些方法中,以便很好地控制演示文稿。

在我的情况下,它花了大约一天的研究和黑客(可能还有另外半天的清理和调整),但我设法得到一个非常好的播放/暂停透明按钮,带有“播放图标”图像叠加暂停或停止时,根据玩家状态进行所有加载或卸载。这是一个简单的自定义播放器控件,完全符合我的要求。完全可行,只需从一个玩家状态开始,获得你想要的东西,然后进入下一个状态。