14

我试图弄清楚如何向 iPhone MoviePlayer 添加自定义控件。有关我正在尝试执行的操作的示例,请参见下图。

替代文字

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

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

同样使用我的旧 1.x 固件方式,它需要我自己捕获触摸事件并隐藏/显示控件。我希望有一种方法可以使用标准控件执行此操作,但如果没有,那很好。

提前致谢。

4

5 回答 5

10

我找到了最好的方法来做到这一点!

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

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

'mainView' 是您的自定义叠加层。这样做可以使您的自定义叠加层与普通叠加层一起显示和隐藏,因为它们现在是同一个!

请注意,这仍然使用标准框架,但在框架中没有记录。所以它应该是 100% 应用商店安全的,但在以后的框架中“可能”在没有苹果通知的情况下发生变化。

于 2008-10-11T21:08:04.257 回答
10

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

另请注意,您应该等到收到 MPMoviePlayerContentPreloadDidFinishNotification,这样电影播放器​​窗口 (idx=1) 才会确实存在 ;-)

请注意,我还在此处为 myOverlayView 分配了一个任意(整数值)视图“标签”——以便我可以在可能的情况下重新使用该视图,即检查它是否已添加到父播放器窗口中。

无论如何,这是相关的代码片段:

// 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
于 2009-10-24T01:17:57.063 回答
8

Apple 提供的这个示例应用程序应该会有所帮助。从描述:

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

于 2008-10-10T13:27:35.997 回答
1

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

https://github.com/ign/VideoPlayerKit

于 2013-02-14T09:21:30.980 回答
1

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

来自 git 仓库:

“MPMoviePlayerController 的插入式替代品,它公开了 UI 元素并允许最大程度的自定义”

https://github.com/alobi/ALMoviePlayerController

于 2014-10-14T19:31:57.873 回答