添加捏合手势

This commit is contained in:
bluesea 2024-04-22 17:56:08 +08:00
parent f0528c6e7a
commit 1f1d2282e9
7 changed files with 102 additions and 21 deletions

View File

@ -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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

View File

@ -1,7 +1,7 @@
{ {
"images" : [ "images" : [
{ {
"filename" : "play.png", "filename" : "play (1).png",
"idiom" : "universal", "idiom" : "universal",
"scale" : "1x" "scale" : "1x"
}, },

Binary file not shown.

After

Width:  |  Height:  |  Size: 560 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -37,40 +37,47 @@ class ZZHCustomPlayer: UIView {
var playerIsSeeking:Bool = false// var playerIsSeeking:Bool = false//
//maskview
var timerForMaskView:Timer?//
var temScale:CGFloat = 1.0
var currentScale:CGFloat = 1.0//
//ui //ui
var playerLayerBgView:UIView? var playerLayerBgView:UIView?
var avPlayer:AVPlayer? var avPlayer:AVPlayer?
var avPlayerLayer:AVPlayerLayer? var avPlayerLayer:AVPlayerLayer?
var timeSlider:ZZHCustomSlider? 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)// let playerPauseBgColor:UIColor = UIColor(r: 20, g: 20, b: 20, a: 0.2)//
lazy var maskPlayerView:UIView? = {// lazy var maskPlayerView:UIView? = {//
let bgView = UIView() let bgView = UIView()
bgView.isHidden = true
bgView.backgroundColor = playerPauseBgColor bgView.backgroundColor = playerPauseBgColor
bgView.addSubview(self.playBtn)
bgView.addSubview(self.playStateImgView) self.playBtn.snp.makeConstraints { make in
self.playStateImgView.snp.makeConstraints { make in
make.centerX.centerY.equalToSuperview() make.centerX.centerY.equalToSuperview()
make.width.height.equalTo(80) 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 return bgView
}() }()
lazy var playStateImgView:UIImageView = { lazy var playBtn:UIButton = {
let imgView = UIImageView() let btn = UIButton()
imgView.image = UIImage(named: "custom_playBtn") btn.addTarget(self, action: #selector(playOrPause(sender: )), for: .touchUpInside)
return imgView btn.setImage(UIImage(named: "custom_playBtn"), for: .normal)
return btn
}() }()
deinit { deinit {
@ -109,9 +116,18 @@ class ZZHCustomPlayer: UIView {
playerLayerBgView!.layer.addSublayer(avPlayerLayer!) playerLayerBgView!.layer.addSublayer(avPlayerLayer!)
playerLayerBgView?.backgroundColor = UIColor.clear 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) timeSlider = ZZHCustomSlider(frame: .zero)
@ -197,6 +213,8 @@ class ZZHCustomPlayer: UIView {
print("暂停...") print("暂停...")
play(false) play(false)
} }
iniTimerForMaskView()
} }
//使play //使play
@ -210,15 +228,57 @@ class ZZHCustomPlayer: UIView {
self.avPlayer?.pause() self.avPlayer?.pause()
} }
updatePlayMaskView(value)
} }
// //
func updatePlayMaskView(_ value:Bool) { func updatePlayMaskView(_ value:Bool) {
playStateImgView.isHidden = value maskPlayerView?.isHidden = value
self.maskPlayerView?.backgroundColor = value ? .clear : playerPauseBgColor 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))
}
// playermaskview
@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 //slider ui