我想弄清楚如何将自定义控件添加到iPhone MoviePlayer。 有关我想要做的示例,请参阅以下图像。
我正在尝试在基本电影控件的右侧和左侧添加类似控件的内容。
我在Open SDK中通过向playerview添加子类来完成此操作,但现在在官方SDK和Apple转移到MPMoviePlayerController我不知道该怎么做。
另外,使用我的旧1.x固件方式,它需要我自己捕捉触摸事件并隐藏/显示控件。我希望有一种方法可以用标准控件来做到这一点,但如果没有,那很好。
提前致谢。
答案 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)
This sample application应该有所帮助。从描述:
演示如何使用媒体 播放器框架播放电影 全屏。该示例包含代码 配置电影背景 颜色,播放控制和缩放 模式通过内置设置 应用。还显示了如何绘制 自定义叠加控件位于 播放期间的电影。
答案 3 :(得分:1)
我推荐VideoPlayerKit。支持流媒体,全屏,AirPlay。
答案 4 :(得分:1)
我还没有实现ALMoviePlayerController,但它似乎为您的问题提供了一个简洁而充分的解决方案。
来自git repo:
“MPMoviePlayerController的替代品,用于公开UI元素并允许最大程度的自定义”