2008-10-10 170 views
14

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

alt text http://www.maclife.com/files/u53/06_player.jpg

我想补充一点像右侧的控制,离开了电影的基本控制。

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

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

在此先感谢。

回答

10

我发现最好的方式来做到这一点!

你创建你的电影播放器​​像正常,然后执行以下操作:

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

其中“MAINVIEW”是您的自定义覆盖。这样做会使您的自定义叠加层显示和隐藏正常的叠加层,因为它们现在是相同的!

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

+0

我刚刚一直在寻找相同的东西。好工作。 +1 – Akusete 2009-03-24 11:42:00

+0

你们是否碰巧知道你是否可以在mediaplayer中创建自定义控件以外的其他控件?例如,逐帧播放? – keuminotti 2009-07-02 22:02:17

+0

您可以创建控件,但这些控件的作用仅限于您可以使用SDK执行的操作。例如,我有一个评级控制,我会显示评级,并在评级时将其发送给服务器。你想要的是要能够告诉玩家前进1帧并停止,目前你不能。如果需要,请在bugreporter.apple.com上提交功能请求。 – kdbdallas 2009-07-07 04:49:34

8

This sample application苹果提供的应该有所帮助。从描述:

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

+3

这适用于添加自定义的控制,但是它确实不使用默认控件切换。 该示例显示如何在自定义控件中捕捉触摸,但它们显示的内容不会用于隐藏控件。您仍然需要点击其他按钮才能隐藏您的控件。 – kdbdallas 2008-10-10 22:06:56

10

这里的人们可能也在其他各种博客文章中看到了以下“获取电影播放器​​窗口”的方法 - 在索引= 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 
1

我还没有实现ALMoviePlayerController,但它似乎提供了一个简洁,足以解决你的问题。

从混帐回购协议:

“滴水的替代产品的MPMoviePlayerController暴露的UI元素,并允许最大定制”

https://github.com/alobi/ALMoviePlayerController

相关问题