Pārlūkot izejas kodu

Merge branch 'master' of https://git.yishihui.com/iOS/BFRecordScreenKit
合并代码

jsonwang 3 gadi atpakaļ
vecāks
revīzija
f1e8470356

+ 48 - 23
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -310,8 +310,15 @@ public class BFRecordScreenController: BFBaseViewController {
             BFLog(1, message: "haveSpeak is:\(haveSpeak),noHaveSpeak is:\(noHaveSpeak)")
             self?.haveSpeakVolume = haveSpeak / 100.0
             self?.noSpeakVolume = noHaveSpeak / 100.0
-
-//            self?.assetPlayer?.volume = self?.noSpeakVolume
+            if !(self?.isNormalPlaying ?? false) && !(self?.isRecording ?? false) {
+                if (self?.deleteRecordBtn.isHidden ?? false)  {
+                    self?.recordPlayer?.volume = 0
+                    self?.assetPlayer?.volume = self?.noSpeakVolume ?? 1.0
+                } else {
+                    self?.recordPlayer?.volume = 1.0
+                    self?.assetPlayer?.volume = self?.haveSpeakVolume ?? 0.0
+                }
+            }
         }
 
         return audioSettingView
@@ -514,7 +521,7 @@ public class BFRecordScreenController: BFBaseViewController {
 
         // MARK: -  录音结束
 
-        recorderManager?.endRecordHandle = { [weak self] voideModel, _ in
+        recorderManager?.endRecordHandle = { [weak self, weak recorderManager] voideModel, _ in
             if let sself = self, let model = voideModel, FileManager.default.fileExists(atPath: model.wavFilePath ?? "") {
                 // 加入到语音数组里
                 model.endCMTime = sself.currentAssetProgress
@@ -602,6 +609,7 @@ public class BFRecordScreenController: BFBaseViewController {
                 }
                 sself.currentPlayRecordIndex = -3 // 刚录音完,不需要播放录音
                 BFLog(3, message: "重置播放index-\(#function) = \(sself.currentPlayRecordIndex)")
+                recorderManager?.voiceModel = nil
             }
         }
         recorderManager?.cancelRecordHandle = { [weak self] voiceModel in
@@ -637,9 +645,6 @@ public class BFRecordScreenController: BFBaseViewController {
         bottomeView.addSubview(progreddL)
         //        view.addSubview(toolV)
         bottomeView.addSubview(recordBtn)
-        if itemModels[currItemModelIndex].mediaType == .IMAGE {
-            recordBtn.isEnabled = true
-        }
         bottomeView.addSubview(deleteRecordBtn)
         bottomeView.addSubview(withDrawBtn)
         //        bottomeView.addSubview(changeVoiceBtn)
@@ -847,13 +852,17 @@ public class BFRecordScreenController: BFBaseViewController {
         switch recognizer.state {
         case .began:
             touchStart = recognizer.location(in: bottomeView)
-            beginOnStartBtn = recordBtn.frame.contains(touchStart)
+            beginOnStartBtn = (beginOnStartBtn || recordBtn.frame.contains(touchStart))
+            BFLog(1, message: "beginOnStartBtn:\(beginOnStartBtn)")
         case .changed:
             if beginOnStartBtn == true {
                 let nowPoint = recognizer.location(in: bottomeView)
                 BFLog(1, message: "nowPoint x: \(nowPoint.x) y:\(nowPoint.y)")
                 if recordBtn.frame.contains(nowPoint) {
-                } else {}
+                
+                } else {
+                    
+                }
             }
 
         case .ended:
@@ -973,12 +982,11 @@ public class BFRecordScreenController: BFBaseViewController {
         if isDragingProgressSlder {
             return
         }
-        // 开始时间
-        let model = PQVoiceModel()
-        model.startCMTime = currentAssetProgress
-        isRecording = true
+ 
+        
+
 //        progressThumV.progressView.isUserInteractionEnabled = false
-        collectionView.isScrollEnabled = false
+//        collectionView.isScrollEnabled = false
         // 开始录制时清除屏幕上的字幕
         subtitleLabel.text = ""
         subtitleLabel.backgroundColor = UIColor.clear
@@ -988,9 +996,16 @@ public class BFRecordScreenController: BFBaseViewController {
             BFLog(message: "录音机初始化错误!!!")
             return
         }
+        
+        
+        // 开始时间
+        beginOnStartBtn = true
+        isRecording = true
 
-        view.isUserInteractionEnabled = false
+        UIApplication.shared.keyWindow?.isUserInteractionEnabled = false
 
+        let model = PQVoiceModel()
+        model.startCMTime = currentAssetProgress
         model.volume = 100
         recorderManager?.voiceModel = model
         recorderManager?.startRecord()
@@ -1023,11 +1038,13 @@ public class BFRecordScreenController: BFBaseViewController {
         if !isRecording {
             return
         }
+        beginOnStartBtn = false
+
         isRecording = false
 //        progressThumV.progressView.isUserInteractionEnabled = true
-        collectionView.isScrollEnabled = true
+//        collectionView.isScrollEnabled = true
 
-        view.isUserInteractionEnabled = true
+        UIApplication.shared.keyWindow?.isUserInteractionEnabled = true
         recorderManager?.stopRecord(isCancel: false)
 
         if currentAssetProgress.seconds - (recorderManager?.voiceModel?.startCMTime.seconds ?? 0) >= 1.0 {
@@ -1053,8 +1070,9 @@ public class BFRecordScreenController: BFBaseViewController {
     @objc func cancleRecord() {
         isRecording = false
         recorderManager?.stopRecord(isCancel: true)
-        progressThumV.progressView.isUserInteractionEnabled = true
-        collectionView.isScrollEnabled = true
+//        progressThumV.progressView.isUserInteractionEnabled = true
+//        collectionView.isScrollEnabled = true
+        UIApplication.shared.keyWindow?.isUserInteractionEnabled = true
         pause()
     }
 
@@ -1579,8 +1597,11 @@ public class BFRecordScreenController: BFBaseViewController {
                             DispatchQueue.main.async { [weak self, weak itemModel] in
                                 self?.progressThumV.recordItem = itemModel
                                 self?.progressThumV.isHidden = false
+                                self?.recordBtn.isEnabled = true
                             }
                         }
+                    } else {
+                        recordBtn.isEnabled = true
                     }
                 }
             }
@@ -1631,7 +1652,6 @@ public class BFRecordScreenController: BFBaseViewController {
         } else {
             assetPlayer = AVPlayer(playerItem: item)
             assetPlayer?.volume = noSpeakVolume
-            recordBtn.isEnabled = true
             avplayerTimeObserver?.invalidate()
             avplayerTimeObserver = assetPlayer?.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 1000), queue: DispatchQueue.global()) { [weak self] time in
                 // 进度监控
@@ -1871,7 +1891,10 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
             }
         }
         cell.btnClickHandle = { [weak self] sender, _ in
-            self?.playVideo(btn: sender)
+            guard let sself = self else {
+                return
+            }
+            sself.playVideo(btn: sself.playBtn)
         }
         cell.recordItem = recordItem
         return cell
@@ -1894,6 +1917,8 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
         BFLog(1, message: "滚动结束")
         let page = Int((scrollView.contentOffset.x + scrollView.frame.width / 2) / scrollView.frame.width)
         if page != currItemModelIndex {
+            // 切换素材时先把录制状态切为不可用,延迟可点,避免在缩略图未加载出来时即可录制
+            recordBtn.isEnabled = false
             // 暂停
             pause()
             // 如果在录制中,停止录制
@@ -1913,9 +1938,11 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
             playBtn.isSelected = (recordItem.mediaType == .IMAGE && recordItem.voiceStickers.count <= 0)
             // 重绘录音区域
             progressThumV.recordItem = recordItem
-            DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in
+            DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { [weak self] in
                 /// 重绘录音进度视图
                 self?.resetAllIndirectionView()
+                // 重绘录音进度
+                self?.recordBtn.isEnabled = true
             }
             // 更新缩略图
             progressThumV.isHidden = false
@@ -1935,8 +1962,6 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
             if recordItem.mediaType == .VIDEO {
                 reloadMaterial()
                 assetPlayer?.seek(to: .zero, toleranceBefore: CMTime(value: 1, timescale: 1_000_000), toleranceAfter: CMTime(value: 1, timescale: 1_000_000))
-            } else {
-                recordBtn.isEnabled = true
             }
             if changeItemHandle != nil {
                 changeItemHandle!(page)

+ 12 - 0
BFRecordScreenKit/Classes/RecordScreen/View/BFImageCoverViewCell.swift

@@ -17,6 +17,12 @@ open class BFImageCoverViewCell: UICollectionViewCell {
         let playView = GPUImageView(frame: bounds)
         return playView
     }()
+    
+    lazy var playBtn:UIButton = {
+        let btn = UIButton()
+        btn.addTarget(self, action: #selector(btnClick(sender:)), for: .touchUpInside)
+        return btn
+    }()
 
     lazy var filter: GPUImageFilter = {
         let filter = GPUImageFilter()
@@ -42,6 +48,7 @@ open class BFImageCoverViewCell: UICollectionViewCell {
     override public init(frame: CGRect) {
         super.init(frame: frame)
         contentView.addSubview(playView)
+        contentView.addSubview(playBtn)
     }
 
     public required init?(coder _: NSCoder) {
@@ -69,6 +76,11 @@ open class BFImageCoverViewCell: UICollectionViewCell {
 
     public func addLayout() {
         playView.frame = contentView.bounds
+        playBtn.snp.makeConstraints { make in
+            make.left.right.equalToSuperview()
+            make.top.equalTo(cDevice_iPhoneNavBarAndStatusBarHei)
+            make.bottom.equalTo(-218)
+        }
     }
 
     @objc func btnClick(sender: UIButton) {