Browse Source

Merge branch 'master' of https://git.yishihui.com/iOS/BFRecordScreenKit

wenweiwei 3 years ago
parent
commit
b04438dd3c

+ 16 - 8
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -833,18 +833,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 {
-                let progress = self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .IMAGE ? progress : progress - 0.08
-                self?.indirectionView?.setProgress(start: self?.recordStartTime ?? 0, progress: progress)
-                if self?.itemModels[self?.currItemModelIndex ?? 0].mediaType == .IMAGE {
-                    self?.imageRecordProgress(isRecord: true, progress: progress)
+
+            if sself.isRecording {
+                let progress = sself.itemModels[sself.currItemModelIndex ?? 0].mediaType == .IMAGE ? progress : progress - 0.08
+                sself.indirectionView?.setProgress(start: sself.recordStartTime ?? 0, progress: progress)
+                if sself.itemModels[sself.currItemModelIndex ].mediaType == .IMAGE {
+                    sself.imageRecordProgress(isRecord: true, progress: progress)
                 }
             }
         }
@@ -1531,6 +1538,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 - 4
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,6 +63,7 @@ class BFIndirectionProgressView: UIView {
         subviews.forEach { vv in
             vv.removeFromSuperview()
         }
+ 
         items?.forEach {[weak self] model in
             _ = createItemView(minX: model.startTime * CGFloat(self?.percenWidth ?? 0), width: (model.endTime - model.startTime) * CGFloat(self?.percenWidth ?? 0))
         }

+ 25 - 13
BFRecordScreenKit/Classes/RecordScreen/View/BFVideoThumbProgressView.swift

@@ -30,7 +30,7 @@ class BFVideoThumbProgressView: UIView {
     var dragStartHandle: (() -> Void)?
     var isDrag = false
 
-    let thumbImageWidth = 70.0
+    let thumbImageWidth : CGFloat = 70.0
 
     let fetchThumbStrategy: BFVideoThumbProgressStrategyProtocol = BFVideoThumbProgressStrategy()
 
@@ -75,6 +75,14 @@ class BFVideoThumbProgressView: UIView {
             make.width.equalTo(3)
             make.center.height.equalToSuperview()
         }
+        
+        progressView.contentView.addSubview(progessIndicateBackV)
+        progessIndicateBackV.snp.remakeConstraints { make in
+            make.left.equalTo(width * 0.5)
+            make.right.equalTo(width * -0.5)
+            make.bottom.equalToSuperview()
+            make.height.equalTo(6)
+        }
     }
 
     required init?(coder _: NSCoder) {
@@ -102,8 +110,9 @@ class BFVideoThumbProgressView: UIView {
         let date = Date()
         let dur = videoAsset.duration.seconds
         if dur > 0 {
-            let fps = Double(fetchThumbStrategy.frameNumberOfVideo(assetDuration: dur)) / dur
-            splitVideoFileUrlFps(urlAsset: videoAsset, fps: fps, firstImagesCount: 4) { [weak self] hadGetAll, images in
+            let count = fetchThumbStrategy.frameNumberOfVideo(assetDuration: dur)
+            let fps = Double(count) / dur
+            splitVideoFileUrlFps(urlAsset: videoAsset, fps: fps, firstImagesCount: Int(ceil(width/2.0/thumbImageWidth))) { [weak self] hadGetAll, images in
                 BFLog(1, message: "获取缩略图:\(hadGetAll), \(Date().timeIntervalSince(date))")
                 self?.recordItem!.thumbImgs.removeAll()
                 self?.recordItem!.thumbImgs.append(contentsOf: images)
@@ -125,7 +134,9 @@ class BFVideoThumbProgressView: UIView {
     func addThumbImages(images: [UIImage]) {
         DispatchQueue.main.async { [weak self] in
             self?.progressView.contentView.subviews.forEach { subview in
-                subview.removeFromSuperview()
+                if subview is UIImageView {
+                    subview.removeFromSuperview()
+                }
             }
             if images.count > 0 {
                 self?.thumbImgs = images
@@ -135,7 +146,7 @@ class BFVideoThumbProgressView: UIView {
                         let iv = UIImageView(image: img)
                         iv.contentMode = .scaleAspectFill
                         iv.clipsToBounds = true
-                        sself.progressView.contentView.addSubview(iv)
+                        sself.progressView.contentView.insertSubview(iv, belowSubview: sself.progessIndicateBackV)
                         iv.snp.makeConstraints { make in
                             make.left.equalTo(CGFloat(i) * CGFloat(sself.thumbImageWidth) + sself.width * 0.5)
                             make.top.bottom.equalToSuperview()
@@ -148,13 +159,13 @@ class BFVideoThumbProgressView: UIView {
                         make.right.equalTo(sself.width * -0.5)
                     }
 
-                    sself.progressView.contentView.addSubview(sself.progessIndicateBackV)
-                    sself.progessIndicateBackV.snp.makeConstraints { make in
-                        make.left.equalTo(sself.width * 0.5)
-                        make.right.equalTo(sself.width * -0.5)
-                        make.bottom.equalToSuperview()
-                        make.height.equalTo(6)
-                    }
+//                    sself.progressView.contentView.addSubview(sself.progessIndicateBackV)
+//                    sself.progessIndicateBackV.snp.remakeConstraints { make in
+//                        make.left.equalTo(sself.width * 0.5)
+//                        make.right.equalTo(sself.width * -0.5)
+//                        make.bottom.equalToSuperview()
+//                        make.height.equalTo(6)
+//                    }
                 }
             }
         }
@@ -202,10 +213,11 @@ class BFVideoThumbProgressView: UIView {
                 progressView.contentOffset = CGPoint(x: progress * Double(w) / second, y: 0)
             }
         } else if recordItem?.mediaType == .IMAGE {
+//            if (recordItem?.materialDuraion ?? 0) > progress {
             BFLog(message: "updateProgress:\(progress)")
-            BFLog(message: "录音进度--指示器:progress=\(progress),duration=\(recordItem?.materialDuraion ?? 0),w=\(progressView.contentSize.width - width),perW=\(thumbImageWidth),totalW:\(progress * thumbImageWidth / 2.0)")
             progressView.contentOffset = CGPoint(x: progress * thumbImageWidth / 2.0, y: 0)
             appendThumb(progress: progress)
+//            }
         }
     }
 }