ZFPlayer 播放器调用addPlayerViewToSmallFloatView开小窗播放样式错误以及无法关闭处理

ZFPLayer 是一款强大开源的视频播放器,在结合列表播放滑动超出当前视频范围调用 addPlayerViewToSmallFloatView开启小窗播放(类似画中画,但没有其强大和友好的交互)布局错误并且右上角的关闭按钮也没法关闭,错乱参考图如下:

1、样式错乱原因分析:
self.currentPlayerManager.view.autoresizingMask 以父视图为基础进行动态响应,而在 addPlayerViewToSmallFloatView 和 addPlayerViewToContainerView 等方法中将当前视频播放对象(self.currentPlayerManager.view)分别添加到 self.smallFloatView、self.containerView 等视图中没有移除之前的添加
解决方法:
添加(即调用:addSubview:self.currentPlayerManager.view)之前先移除 [self.currentPlayerManager.view removeFromSuperview]

2、小窗播放右上角关闭无效
解决方法:实现 ZFPlayerControlView 对象的 floatControlView.closeClickCallback 回调方法,在方法里面调用 self.playManager.stop() 即可关闭

private lazy var controlView:ZFPlayerControlView = {
        let _cv = ZFPlayerControlView.init()
        
        //全屏模式
        _cv.fullScreenMode = .landscape
        _cv.landScapeControlView.fullScreenMode = .landscape
        
        //显示控制层
        _cv.prepareShowControlView = true
        
        //不隐藏控制视图
        _cv.portraitControlView.isHidden = false
        
        //显示加载视图
        _cv.prepareShowLoading = true
        
        //退出全屏被点击(全屏返回按钮被点击)
        _cv.backBtnClickCallback = {[weak self] in
            guard let self = self else { return }
            self.data?.isAutorotate = false
            self.data?.faceOrientation = .portrait
            
            self.player.rotate(to: .portrait, animated: false) {
                print("已返回小屏")
            }
            
            //退出全屏
            self.player.enterFullScreen(false, animated: false)
            
            //恢复原始状态
            if self.player.isSmallFloatViewShow || self.isSmallView {
                self.player.addPlayerViewToSmallFloatView()
            }
            else{
                self.player.addPlayerView(toContainerView: self.contentView)
            }
        }
        
        /// 小窗播放关闭事件
        _cv.floatControlView.closeClickCallback = {[weak self] in
            guard let self = self else { return }
            self.player.stopCurrentPlayingView()
            self.playManager.stop()
        }
        
        return _cv
    }()

处理后最终效果如下图:

猜你喜欢

转载自blog.csdn.net/yimiyuangguang/article/details/124349066