Browse Source

及时更新长度(因为有个缓冲策略,先加载3张缩略图,后加载剩余缩略图,导致在未加载完时就录音,画线速率出现变化)

harry 3 years ago
parent
commit
c2adb99225

+ 14 - 7
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -816,19 +816,25 @@ public class BFRecordScreenController: BFBaseViewController {
         
         recorderManager.audioRecorder?.recorderProgross = { [weak self] progress in
             BFLog(1, message: "curr:录音进度--\(progress)")
-            if self?.indirectionView == nil {
-                self?.indirectionView = BFIndirectionProgressView(frame: self?.progressThumV.progessIndicateBackV.bounds ?? CGRect.zero, percenWidth: self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .IMAGE ? (self?.progressThumV.thumbImageWidth ?? 0) / 2 : 0, totalDuration: self?.itemModels[self?.currItemModelIndex ?? 0].materialDuraion ?? 0)
-                self?.progressThumV.progessIndicateBackV.addSubview((self?.indirectionView)!)
+            guard let sself = self else {
+                return
+            }
+            if sself.indirectionView == nil {
+                sself.indirectionView = BFIndirectionProgressView(frame: sself.progressThumV.progessIndicateBackV.bounds , percenWidth: sself.itemModels[sself.currItemModelIndex ].mediaType == .IMAGE ? (sself.progressThumV.thumbImageWidth ) / 2 : 0, totalDuration: sself.itemModels[sself.currItemModelIndex ].materialDuraion )
+                sself.progressThumV.progessIndicateBackV.addSubview((sself.indirectionView)!)
+                sself.indirectionView!.snp.makeConstraints({ make in
+                    make.edges.equalToSuperview()
+                })
             }
             // 更新录制进度
             // 注:视频无法以录制进度驱动,因当录音开始录音时播放器还未播放,导致进度不一致
             // 注:在录制停止时,视频播放器进度依然在走,误差在80毫秒左右
-            if self?.isRecording ?? false {
+            if sself.isRecording {
                 let ratioX = 0.08
-                self?.indirectionView?.setProgress(start: self?.recordStartTime ?? 0, progress: progress - ratioX)
+                sself.indirectionView?.setProgress(start: sself.recordStartTime, progress: progress - ratioX)
             }
-            if self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .IMAGE {
-                self?.imageRecordProgress(isRecord: true, progress: progress)
+            if sself.itemModels[sself.currItemModelIndex].mediaType == .IMAGE {
+                sself.imageRecordProgress(isRecord: true, progress: progress)
             }
         }
     }
@@ -1547,6 +1553,7 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
             // 重设撤销栈
             itemModels[currItemModelIndex].events = events
             events = itemModels[page].events
+            events.append(WithDrawModel(type: 0, timestamp: 0))
             if let cell = collectionView.visibleCells.first as? BFImageCoverViewCell{
                 playBtn = cell.playBtn
             }

+ 18 - 5
BFRecordScreenKit/Classes/RecordScreen/View/BFIndirectionProgressView.swift

@@ -14,7 +14,20 @@ class BFIndirectionProgressView: UIView {
     var indirecColor: UIColor = UIColor.clear
     var themeColor: UIColor = UIColor.hexColor(hexadecimal: "#28BE67")
     var progressHeight: CGFloat = 6
-    var percenWidth: CGFloat = 0
+    var tmpPercentW : CGFloat = 0
+    var percenWidth: CGFloat {
+        get {
+            if tmpPercentW <= 0 && totalDuration > 0 {
+                return frame.width / totalDuration
+            }else{
+                return  tmpPercentW
+            }
+            
+        }
+        set{
+            tmpPercentW = newValue
+        }
+    }
     var totalDuration: Float64 = 0
     var currentItem: UIView? // 当前的Item
 
@@ -29,9 +42,9 @@ class BFIndirectionProgressView: UIView {
         self.totalDuration = totalDuration
         self.progressHeight = progressHeight
         self.percenWidth = percenWidth
-        if self.percenWidth <= 0, totalDuration > 0 {
-            self.percenWidth = frame.width / totalDuration
-        }
+//        if self.percenWidth <= 0, totalDuration > 0 {
+//            self.percenWidth = frame.width / totalDuration
+//        }
     }
 
     required init?(coder _: NSCoder) {
@@ -50,7 +63,7 @@ class BFIndirectionProgressView: UIView {
             vv.removeFromSuperview()
         }
         items?.forEach { model in
-            _ = createItemView(minX: model.startTime * percenWidth, width: (model.endTime - model.startTime) * percenWidth)
+            _ = createItemView(minX: model.startTime * percenWidth, width: (model.endTime - model.startTime) * self.percenWidth)
         }
     }