diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate
index 597a3b5..9446302 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.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
index 9c77ae3..1dd7fe4 100644
--- a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
+++ b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
@@ -32,8 +32,8 @@
endingColumnNumber = "9223372036854775807"
startingLineNumber = "576"
endingLineNumber = "576"
- landmarkName = "CCHomeController"
- landmarkType = "21">
+ landmarkName = "imagePickerController(_:didFinishPickingMediaWithInfo:)"
+ landmarkType = "7">
diff --git a/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/Contents.json b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/Contents.json
new file mode 100644
index 0000000..e082eff
--- /dev/null
+++ b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "filename" : "icon@1x.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_playBtn.imageset/icon@1x.png b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/icon@1x.png
new file mode 100644
index 0000000..45cd00b
Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/customPlayer/custom_playBtn.imageset/icon@1x.png differ
diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift
index 8cd125b..d72241c 100644
--- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift
+++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift
@@ -13,7 +13,34 @@ class ZZHCustomPlayer: UIView {
var avPlayer:AVPlayer?
var avPlayerLayer:AVPlayerLayer?
var timeSlider:ZZHCustomSlider?
+ var prePlayingState:Bool?//标记 在滑块拖动前,player的播放状态,以便在拖动完毕之后回复播放状态
+ let playerPauseBgColor:UIColor = UIColor(r: 245, g: 245, b: 245, a: 0.2)//暂停时的背景颜色
+ lazy var maskPlayerView:UIView? = {//播放按钮 背景
+ let bgView = UIView()
+ bgView.backgroundColor = playerPauseBgColor
+
+ bgView.addSubview(self.playStateImgView)
+
+ self.playStateImgView.snp.makeConstraints { make in
+ make.centerX.centerY.equalToSuperview()
+ make.width.height.equalTo(40)
+ }
+
+ 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
+ }()
override init(frame: CGRect) {
super.init(frame: frame)
@@ -32,9 +59,14 @@ class ZZHCustomPlayer: UIView {
playerLayerBgView!.layer.addSublayer(avPlayerLayer!)
playerLayerBgView?.backgroundColor = UIColor.orange
+ self.maskPlayerView?.frame = avPlayerLayer!.frame
+ playerLayerBgView?.addSubview(maskPlayerView!)
+
+
+
timeSlider = ZZHCustomSlider(frame: .zero)
- timeSlider?.processChangeValueCallback = { value in
- print("value:\(value)")
+ timeSlider?.processChangeValueCallback = { (value,isMoving) in
+ print("value:\(value) isMoving:\(isMoving)")
}
self.addSubview(timeSlider!)
timeSlider!.snp.makeConstraints { make in
@@ -47,7 +79,39 @@ class ZZHCustomPlayer: UIView {
}
+ //暂停或者播放
+ @objc func playOrPause(sender:UIButton) {
+ if sender.tag == 0 {//播放
+ play(true)
+ sender.tag = 1
+ print("bofang...")
+ }
+ else {//暂停
+ print("暂停...")
+ play(false)
+ sender.tag = 0
+ }
+ }
+ //内、外部共同使用该play接口
+ func play(_ value:Bool) {
+ if value {
+ self.avPlayer?.play()
+ prePlayingState = true
+ }
+ else {
+ prePlayingState = false
+ self.avPlayer?.pause()
+ }
+
+ updatePlayMaskView(value)
+ }
+
+ //根据状态更新播放器遮罩视图显示与隐藏
+ func updatePlayMaskView(_ value:Bool) {
+ playStateImgView.isHidden = value
+ self.maskPlayerView?.backgroundColor = value ? .clear : playerPauseBgColor
+ }
override func draw(_ rect: CGRect) {
super.draw(rect)
diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift
index 81a30d1..243dcd0 100644
--- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift
+++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomSlider.swift
@@ -7,7 +7,7 @@
import Foundation
import UIKit
-typealias CustomSliderProcessChangeValueCallback = (_ currentValue:Float)->Void
+typealias CustomSliderProcessChangeValueCallback = (_ currentValue:Float,_ isMoving:Bool)->Void
class ZZHCustomSlider: UIView {
var sHeight:CGFloat?
var sLabel:UILabel?
@@ -74,20 +74,27 @@ class ZZHCustomSlider: UIView {
}
//内部拖动更新当前滑块value:0~1
- func updateProcessValue(value:Float) {
+ func updateProcessValue(value:Float,isMoving:Bool) {
self.timeSlider!.value = value
guard let processChangeValueCallback else {
return
}
- var currentValue = max(0, min(value, 1))
- //格式化为0.x
- let formattedValue = String(format: "%.1f", currentValue)
- currentValue = Float(formattedValue)!
- if currentValue > preValue || currentValue < preValue {
- preValue = currentValue
- processChangeValueCallback(preValue)
+ if isMoving {
+ var currentValue = max(0, min(value, 1))
+ //格式化为0.x
+ let formattedValue = String(format: "%.1f", currentValue)
+ currentValue = Float(formattedValue)!
+
+ if currentValue > preValue || currentValue < preValue {
+ preValue = currentValue
+ processChangeValueCallback(preValue,isMoving)
+ }
}
+ else {
+ processChangeValueCallback(preValue,isMoving)
+ }
+
}
//外部播放时的更新当前滑块
@@ -108,7 +115,7 @@ class ZZHCustomSlider: UIView {
if let th = touch {
let touchPoint = th.location(in: self.timeSlider!)
- updateProcessValue(value: Float(touchPoint.x / self.timeSlider!.frame.size.width))
+ updateProcessValue(value: Float(touchPoint.x / self.timeSlider!.frame.size.width),isMoving: true)
}
}
@@ -118,6 +125,8 @@ class ZZHCustomSlider: UIView {
timeSlider!.isNormal = true
self.updateSliderHeight(height: (self.sHeight)!)
}
+
+ updateProcessValue(value: preValue,isMoving: false)
}
override func touchesCancelled(_ touches: Set, with event: UIEvent?) {
@@ -125,6 +134,7 @@ class ZZHCustomSlider: UIView {
timeSlider!.isNormal = true
self.updateSliderHeight(height: (self.sHeight)!)
}
+ updateProcessValue(value: preValue,isMoving: false)
}