MPMoviePlayerController在全屏中添加子视图

时间:2013-02-10 20:47:07

标签: objective-c controls mpmovieplayercontroller add subview

我试过这个但是没有用,我在过去7个小时里一直在努力,请帮助我。我想在MPMoviePlayer的全屏视图中添加自定义按钮。

代码:

moviePlayerController = [[MPMoviePlayerController alloc] initWithContentURL:fileURL];

        [self.view addSubview:moviePlayerController.view];
        moviePlayerController.fullscreen = YES;

        UIStoryboard *mainStoryBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:[NSBundle mainBundle]];

        CustomControlsViewController *overlay = (CustomControlsViewController*)[mainStoryBoard instantiateViewControllerWithIdentifier:@"Custom Controls"];

        [moviePlayerController.view addSubview:overlay.view];

        [moviePlayerController play];

1 个答案:

答案 0 :(得分:10)

首先,永远不要在MPMoviePlayerController的视图中添加任何子视图。将它们添加到其背景视图或其父级作为兄弟。

这在MPMoviePlayerController文档中讨论:

  

将电影播放器​​视图视为不透明结构。你可以加   您自己的自定义子视图可以在电影之上叠加内容   绝不能修改任何现有的子视图。此外   在电影上分层内容,您可以提供自定义背景   通过在backgroundView属性中向视图添加子视图来实现内容。

第二,使用正确的全屏时,MPMoviePlayerController不会重复使用其普通视图,而是将其内容直接添加到UIWindow实例上。因此,当使用"适当的"时,您只有以下选项。全屏模式;找到当前的关键窗口,并在切换到全屏模式后直接添加控件。

这样的事情应该做:

//are we in fullscreen-mode?
if (player.fullscreen)
{
    UIWindow *window = [UIApplication sharedApplication].keyWindow;
    if (!window)
    {
         window = [[UIApplication sharedApplication].windows objectAtIndex:0];
    }
    //we now got a proper window for use of our controls ... 
    //add them to the window instance!
}

作为替代方案,只是不要使用"正确的"全屏但重新调整MPMovieViewController的视图以覆盖整个屏幕 - 我称之为"假的"全屏。此选项的一大优点是您可以使用/捕获/覆盖正常的重定向。