将自定义控件添加到MoviePlayer

时间:2008-10-10 08:14:10

标签: iphone objective-c cocoa-touch

我想弄清楚如何将自定义控件添加到iPhone MoviePlayer。 有关我想要做的示例,请参阅以下图像。

alt text

我正在尝试在基本电影控件的右侧和左侧添加类似控件的内容。

我在Open SDK中通过向playerview添加子类来完成此操作,但现在在官方SDK和Apple转移到MPMoviePlayerController我不知道该怎么做。

另外,使用我的旧1.x固件方式,它需要我自己捕捉触摸事件并隐藏/显示控件。我希望有一种方法可以用标准控件来做到这一点,但如果没有,那很好。

提前致谢。

5 个答案:

答案 0 :(得分:10)

我找到了最好的方法!

您可以像平常一样创建电影播放器​​,然后执行以下操作:

id vvController = [theMovie videoViewController];
[[vvController _overlayView] addSubview:mainView];

'mainView'是您的自定义叠加层。这样做会使你的自定义叠加层显示和隐藏正常的叠加层,因为它们现在是同一叠层!

请注意,这仍然使用标准框架,但它在框架中没有记录。因此它应该是100%appstore安全,但“可能”在以后的框架中没有Apple的通知就会改变。

答案 1 :(得分:10)

这里的人们可能还在其他各种博客文章中看到了以下“获取电影播放器​​窗口”的方法 - 索引= 1.虽然这种方法(参见下面的代码片段)也可能有点“脆弱”,它可能有点“更安全”,因为它在MPMoviePlayerController中使用任何未记录或非公共方法。

另请注意,您应该等到获得MPMoviePlayerContentPreloadDidFinishNotification,以便电影播放器​​窗口(idx = 1)确实存在; - )

注意我也在这里为myOverlayView分配一个任意(整数值)视图“标签” - 这样我就可以在可能的情况下重新使用视图,即检查它是否已经添加到父播放器窗口。

anyhoo,这是相关的代码片段:

// use slight "hack" to get our (parent) movie-player window, should always (?) be the UIWindow at index = 1
//
UIWindow *moviePlayerWindow= [[[UIApplication sharedApplication] windows] objectAtIndex:1];

myOverlayView.center = CGPointMake(
                            moviePlayerWindow.bounds.size.width - (myOverlayView.bounds.size.height / 2) - myOverlayView.display_origin.y,
                            moviePlayerWindow.center.y
                                  ); // center our overlay-view

myOverlayView.hidden = NO; // and show it

if( [moviePlayerWindow viewWithTag: MY_OVERLAY_VIEW_TAG] == nil ) {
    // haven't added our overlay-view as a sub-view to the main MoviePlayer window yet... so do that now
    myOverlayView.tag = MY_OVERLAY_VIEW_TAG;
    [moviePlayerWindow addSubview: myOverlayView];
}
[moviePlayerWindow bringSubviewToFront: myOverlayView]; // in any case, bring it to the foreground

答案 2 :(得分:8)

Apple提供的

This sample application应该有所帮助。从描述:

  

演示如何使用媒体   播放器框架播放电影   全屏。该示例包含代码   配置电影背景   颜色,播放控制和缩放   模式通过内置设置   应用。还显示了如何绘制   自定义叠加控件位于   播放期间的电影。

答案 3 :(得分:1)

我推荐VideoPlayerKit。支持流媒体,全屏,AirPlay。

https://github.com/ign/VideoPlayerKit

答案 4 :(得分:1)

我还没有实现ALMoviePlayerController,但它似乎为您的问题提供了一个简洁而充分的解决方案。

来自git repo:

“MPMoviePlayerController的替代品,用于公开UI元素并允许最大程度的自定义”

https://github.com/alobi/ALMoviePlayerController