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] inguard let self = self else { return }self.data?.isAutorotate = falseself.data?.faceOrientation = .portraitself.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] inguard let self = self else { return }self.player.stopCurrentPlayingView()self.playManager.stop()}return _cv}()
处理后最终效果如下图: