0

我的UICollectionView有水平流佈局。每個單元佔據整個屏幕並且分頁打開。每個單元格還包含一個MPMoviePlayerController,我可以毫無問題地播放視頻。但是,如果向左或向右滾動,當前顯示的電影(此時暫停)消失 - 播放器視圖變黑。如果我然後觸發播放,則視頻再次出現。我已經嘗試在scrollview委託方法中添加prepareToPlay以某種方式保持視頻visibile,但沒有成功。MPMoviePlayerController在UICollectionViewCell中滾動時變爲空白

回答

3

一次只能使用MPMoviePlayerController的一個實例。這是MPMoviePlayerController的限制。

就你而言,當你開始滾動時,至少應該初始化兩個MPMoviePlayerController並試圖播放視頻。這不適用於MPMoviePlayerController

如果您想在同一屏幕上同時播放多個視頻,您可能需要考慮使用AVFoundation。還有基於AVFoundation的開源視頻播放器。 Usine其中之一將比從零開始創建AVFoundation播放器更容易。

+2

我切換到AVPlayer,它現在按預期工作。非常感謝! – Shocks

1

當您滾動收藏視圖時,收藏視圖「可重複使用的池」機制將重新使用不在視線內的單元格,因此現有的電影播放器​​將被刪除並且其狀態將被重置。當單元格視圖再次可見時,將從池中獲取視圖(或者如果池爲空,則創建一個新視圖),並且需要重新配置它。 你可以在這樣的情況怎麼辦:

  • 簡單的解決方案:給每一個集合觀察室的唯一標識符(例如,使用細胞指數路徑座標),所以不回收。回顧這種方法:如果你有很多單元格,你可能會遇到內存問題,因爲每個單元格都是從頭開始重新創建的;並且電影播放器​​控制器佔用不可忽略的內存
  • 更復雜的解決方案:通過觀察每個電影播放器​​狀態(播放時間,視頻URL,...您可以通過觀察其參數或收聽其通知)字典,再次由單元索引路徑索引。當電池不在視線中時,電影播放器​​將被重置,但當電池重新開始播放時,您可以將電影播放器​​的狀態重新配置到正確的位置。顯然,操作不是立即進行的(電影播放器​​需要時間才能開始渲染視頻),但是不會給應用增加額外的內存壓力。
相關問題