2008-10-10 206 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

相關問題