添加捏合手势
This commit is contained in:
parent
f0528c6e7a
commit
1f1d2282e9
Binary file not shown.
21
SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_pauseBtn.imageset/Contents.json
vendored
Normal file
21
SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_pauseBtn.imageset/Contents.json
vendored
Normal 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
|
||||
}
|
||||
}
|
||||
BIN
SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_pauseBtn.imageset/pause.png
vendored
Normal file
BIN
SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_pauseBtn.imageset/pause.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 413 B |
@ -1,7 +1,7 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "play.png",
|
||||
"filename" : "play (1).png",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
|
||||
BIN
SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/play (1).png
vendored
Normal file
BIN
SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/play (1).png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 560 B |
Binary file not shown.
|
Before Width: | Height: | Size: 3.0 KiB |
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user