diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate index 78d0b2a..5771afd 100644 Binary files a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate and b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_pauseBtn.imageset/Contents.json b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_pauseBtn.imageset/Contents.json new file mode 100644 index 0000000..5f71ed8 --- /dev/null +++ b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_pauseBtn.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "pause.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_pauseBtn.imageset/pause.png b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_pauseBtn.imageset/pause.png new file mode 100644 index 0000000..6512735 Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_pauseBtn.imageset/pause.png differ diff --git a/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/Contents.json b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/Contents.json index 222061f..4f0d4c5 100644 --- a/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/Contents.json +++ b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "play.png", + "filename" : "play (1).png", "idiom" : "universal", "scale" : "1x" }, diff --git a/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/play (1).png b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/play (1).png new file mode 100644 index 0000000..2f6aa46 Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/play (1).png differ diff --git a/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/play.png b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/play.png deleted file mode 100644 index edce10d..0000000 Binary files a/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/play.png and /dev/null differ diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift index 3923396..d6d3de7 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift @@ -37,40 +37,47 @@ class ZZHCustomPlayer: UIView { var playerIsSeeking:Bool = false//标记播放器是否正在拖动 + //操作maskview的相关配套属性 + var timerForMaskView:Timer?//标记隐藏倒计时 + var temScale:CGFloat = 1.0 + var currentScale:CGFloat = 1.0//当前缩放值 //ui var playerLayerBgView:UIView? var avPlayer:AVPlayer? var avPlayerLayer:AVPlayerLayer? var timeSlider:ZZHCustomSlider? - var prePlayingState:Bool = true //标记 在滑块拖动前,player的播放状态,以便在拖动完毕之后回复播放状态 + var prePlayingState:Bool = true {//标记 在滑块拖动前,player的播放状态,以便在拖动完毕之后回复播放状态 + didSet { + if(prePlayingState){ + playBtn.setImage(UIImage(named: "custom_pauseBtn"), for: .normal) + } + else{ + playBtn.setImage(UIImage(named: "custom_playBtn"), for: .normal) + } + } + } let playerPauseBgColor:UIColor = UIColor(r: 20, g: 20, b: 20, a: 0.2)//暂停时的背景颜色 lazy var maskPlayerView:UIView? = {//播放按钮 背景 let bgView = UIView() + bgView.isHidden = true bgView.backgroundColor = playerPauseBgColor + bgView.addSubview(self.playBtn) - bgView.addSubview(self.playStateImgView) - - self.playStateImgView.snp.makeConstraints { make in + self.playBtn.snp.makeConstraints { make in make.centerX.centerY.equalToSuperview() make.width.height.equalTo(80) } - - let btn = UIButton() - bgView.addSubview(btn) - btn.addTarget(self, action: #selector(playOrPause(sender: )), for: .touchUpInside) - btn.snp.makeConstraints { make in - make.left.top.right.bottom.equalToSuperview() - } return bgView }() - lazy var playStateImgView:UIImageView = { - let imgView = UIImageView() - imgView.image = UIImage(named: "custom_playBtn") - return imgView + lazy var playBtn:UIButton = { + let btn = UIButton() + btn.addTarget(self, action: #selector(playOrPause(sender: )), for: .touchUpInside) + btn.setImage(UIImage(named: "custom_playBtn"), for: .normal) + return btn }() deinit { @@ -109,9 +116,18 @@ class ZZHCustomPlayer: UIView { playerLayerBgView!.layer.addSublayer(avPlayerLayer!) playerLayerBgView?.backgroundColor = UIColor.clear - self.maskPlayerView?.frame = avPlayerLayer!.frame - playerLayerBgView?.addSubview(maskPlayerView!) + //添加遮罩视图 + let mpBgView = UIView(frame: avPlayerLayer!.frame) + playerLayerBgView?.addSubview(mpBgView) + self.maskPlayerView?.frame = mpBgView.bounds + mpBgView.addSubview(maskPlayerView!) + + let tgr = UITapGestureRecognizer(target: self, action: #selector(tapPlayerMaskView(sender: ))) + mpBgView.addGestureRecognizer(tgr) + + let pgr = UIPinchGestureRecognizer(target: self, action: #selector(panPlayerMaskView(sender: ))) + mpBgView.addGestureRecognizer(pgr) timeSlider = ZZHCustomSlider(frame: .zero) @@ -197,6 +213,8 @@ class ZZHCustomPlayer: UIView { print("暂停...") play(false) } + + iniTimerForMaskView() } //内、外部共同使用该play接口 @@ -210,15 +228,57 @@ class ZZHCustomPlayer: UIView { self.avPlayer?.pause() } - updatePlayMaskView(value) } //根据状态更新播放器遮罩视图显示与隐藏 func updatePlayMaskView(_ value:Bool) { - playStateImgView.isHidden = value - self.maskPlayerView?.backgroundColor = value ? .clear : playerPauseBgColor + maskPlayerView?.isHidden = value + if value == false { + iniTimerForMaskView() + } + else { + resetTimerForMaskView() + } + } + + func iniTimerForMaskView() { + resetTimerForMaskView() + timerForMaskView = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(hidenMaskViewTimerAction(sender: )), userInfo: nil, repeats: false) + RunLoop.main.add(timerForMaskView!, forMode: .common) + + } + + func resetTimerForMaskView() { + if let td = timerForMaskView { + td.invalidate() + timerForMaskView = nil + } + } + + @objc func hidenMaskViewTimerAction(sender:CADisplayLink) { + maskPlayerView?.isHidden = true + resetTimerForMaskView() + } + + //点击了player 的maskview + @objc func tapPlayerMaskView(sender:UITapGestureRecognizer) { + updatePlayMaskView(!(maskPlayerView!.isHidden)) + } + + //缩放手势 正在player的maskview进行缩放 + @objc func panPlayerMaskView(sender:UIPinchGestureRecognizer) { + + if sender.state == .began { + temScale = 1.0 + } + + currentScale = currentScale - (temScale - sender.scale) + currentScale = min(currentScale, 1.5) + currentScale = max(currentScale, 0.5) + temScale = sender.scale + print("\(sender.scale) currentScale....\(currentScale)") } //根据播放进度更新slider的 ui