ZFPlayer 在UITableView中的使用

前言

ZFPlayer demo中已經(jīng)列出各種場景的使用,由于公司項目類似于微博,不只是有視頻的展示,tableview由多種復(fù)雜cell組成,為了完美適配,所以更改了部分源代碼
ZFPlayer地址

正文

1. 初始化播放器,設(shè)置屬性,回調(diào)等

ZFPlayerController初始化要給定對應(yīng)的View的tag,這個View一般是UIIMageView用來在cell中展示封面的,ZFPlayer內(nèi)部完全是根據(jù)tag查找View來進行設(shè)置播放視圖的
    ZFAVPlayerManager *playerManager = [[ZFAVPlayerManager alloc] init];
    self.player = [ZFPlayerController playerWithScrollView:self.storyTableView playerManager:playerManager containerViewTag:999];
    self.player.controlView = self.controlView;
此處的controlView即ZFPlayerControlView,它有兩個關(guān)鍵子視圖ZFPortraitControlView和ZFLandScapeControlView,分別是豎屏全屏和橫屏全屏的播放視圖
ZFPlayerController可以設(shè)置很多屬性,可以選擇移動網(wǎng)絡(luò)是否自動播放,也可以直接控制是否自動播放
    // 移動網(wǎng)絡(luò)依然自動播放(默認(rèn)NO)
    self.player.WWANAutoPlay = NO;
    //自動播放
    self.player.shouldAutoPlay = NO;
播放停止之后重置播放器
    MyWeakObj(self);
    self.player.playerDidToEnd = ^(id  _Nonnull asset) {
    [selfWeak.player stopCurrentPlayingCell];
    };
旋轉(zhuǎn)屏幕做的處理
    self.player.orientationWillChange = ^(ZFPlayerController * _Nonnull player, BOOL isFullScreen) {
        [selfWeak setNeedsStatusBarAppearanceUpdate];
        [UIViewController attemptRotationToDeviceOrientation];
        selfWeak.storyTableView.scrollsToTop = !isFullScreen;
    };
播放時間大于0.2隱藏視頻封面,也即之前設(shè)置的tag對應(yīng)的View
這樣的處理的原因在于,播放器在開始播放之后會有短暫的黑屏過程,主要是由于開始播放之后ZFPlayerLoadState狀態(tài)為ZFPlayerLoadStatePlaythroughOK,但是存在短暫的解析過程,視頻的第一幀并沒有出現(xiàn)
    self.player.playerPlayTimeChanged = ^(id<ZFPlayerMediaPlayback>  _Nonnull asset, NSTimeInterval currentTime, NSTimeInterval duration) {
        DLog(@"當(dāng)前播放時間=%f",currentTime);
        if (currentTime > 0.2) {
            selfWeak.controlView.coverImageView.hidden = YES;
        }
    };

2.屏幕旋轉(zhuǎn)處理

對于包含UITabbarController和UINavigationController的控制器,需要分別實現(xiàn)三個方法
UITabbarController
- (BOOL)shouldAutorotate
{
    return [self.selectedViewController shouldAutorotate];
}

- (NSUInteger)supportedInterfaceOrientations
{
    return [self.selectedViewController supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return [self.selectedViewController preferredInterfaceOrientationForPresentation];
}
UINavigationController
- (BOOL)shouldAutorotate {
    return [self.topViewController shouldAutorotate];
}

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return [self.topViewController supportedInterfaceOrientations];
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return [self.topViewController preferredInterfaceOrientationForPresentation];
}

對于父控制器包含子控制器的情況,如果在子控制器中有旋轉(zhuǎn)屏幕的需求,那么父控制器也要實現(xiàn)shouldAutorotate方法

3.滑動播放當(dāng)前正在顯示的cell

需要實現(xiàn)下面幾個方法
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    [scrollView zf_scrollViewDidEndDecelerating];
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    [scrollView zf_scrollViewDidEndDraggingWillDecelerate:decelerate];
}

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView {
    [scrollView zf_scrollViewDidScrollToTop];
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    [scrollView zf_scrollViewDidScroll];
}

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
    [scrollView zf_scrollViewWillBeginDragging];
}
zf_scrollViewDidStopScrollCallback這個回調(diào)可以返回當(dāng)前正在顯示的cell,實現(xiàn)播放方法即可
      // 停止的時候找出最合適的播放
        MyWeakObj(self);
        _storyTableView.zf_scrollViewDidStopScrollCallback = ^(NSIndexPath * _Nonnull indexPath) {
            [selfWeak playTheVideoAtIndexPath:indexPath scrollToTop:NO];
        };

問題: ZFPLayer寫的關(guān)于尋找當(dāng)前正在播放的cell本身是沒有問題的,但是只是不適合我公司的項目而已,在UIScrollView+ZFPlayer.m的zf_filterShouldPlayCellWhileScrolling方法中,根據(jù)tag查找到對應(yīng)View之后只做了是否存在的判斷,而我的邏輯是隱藏,所以計算的當(dāng)前顯示的cell,總是會有問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,172評論 3 119
  • 服務(wù)條款 wex5開發(fā)測試平臺(以下簡稱“本服務(wù)”)是指山東邦維信息科技有限公司(以下簡稱本公司)旗下品牌,提供一...
    figocf閱讀 328評論 0 0
  • 這兩天忙忙忙,事兒好多!26-28交房,交了房就準(zhǔn)備搬家.現(xiàn)在租的房子1號到期,還在糾紛押金問題!倆人朋友都趕到...
    常相依閱讀 234評論 0 0

友情鏈接更多精彩內(nèi)容