Browse Source

图片素材的删除

wenweiwei 3 years ago
parent
commit
fdf153ab09

+ 26 - 2
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -466,7 +466,7 @@ public class BFRecordScreenController: BFBaseViewController {
                             duration = duration + (Double(temp.duration ?? "0") ?? 0)
                             duration = duration + (Double(temp.duration ?? "0") ?? 0)
                         }
                         }
                         sself.itemModels[sself.currItemModelIndex].materialDuraion = Double(String(format: "%.3f", duration)) ?? 0
                         sself.itemModels[sself.currItemModelIndex].materialDuraion = Double(String(format: "%.3f", duration)) ?? 0
-                        model.endTime = (self?.recordStartTime ?? 0) +  (Double(model.duration ?? "0") ?? 0)
+                        model.endTime = (self?.recordStartTime ?? 0) + (Double(model.duration ?? "0") ?? 0)
                         sself.currentAssetProgress = CMTime(seconds: model.endTime, preferredTimescale: 1000)
                         sself.currentAssetProgress = CMTime(seconds: model.endTime, preferredTimescale: 1000)
                         self?.isEndPlay = true
                         self?.isEndPlay = true
                     }
                     }
@@ -475,6 +475,8 @@ public class BFRecordScreenController: BFBaseViewController {
                         self?.changeWithDrawBtnLayout(true)
                         self?.changeWithDrawBtnLayout(true)
                         // 注:在录制结束时矫正当前位置,避免跟指针无法对其
                         // 注:在录制结束时矫正当前位置,避免跟指针无法对其
                         self?.indirectionView?.resetCurrentItem(start: model.startTime, end: model.endTime)
                         self?.indirectionView?.resetCurrentItem(start: model.startTime, end: model.endTime)
+                        // 矫正进度
+                        self?.resetCurrentProgress()
                         self?.deleteRecordBtn.isHidden = true
                         self?.deleteRecordBtn.isHidden = true
                         self?.recordBtn.isHidden = false
                         self?.recordBtn.isHidden = false
                     }
                     }
@@ -800,6 +802,24 @@ public class BFRecordScreenController: BFBaseViewController {
             itemModels[currItemModelIndex].voiceStickers.remove(at: isStopAtRecordRange)
             itemModels[currItemModelIndex].voiceStickers.remove(at: isStopAtRecordRange)
             events.append(WithDrawModel(type: 3, timestamp: currentAssetProgress.seconds, deletedVoices: [(model, isStopAtRecordRange)]))
             events.append(WithDrawModel(type: 3, timestamp: currentAssetProgress.seconds, deletedVoices: [(model, isStopAtRecordRange)]))
             indirectionView?.deleteItem(index: isStopAtRecordRange)
             indirectionView?.deleteItem(index: isStopAtRecordRange)
+            // 注:删除录音后图片素材需要回撤指针进度,同时后面录音往前挪
+            if itemModels[currItemModelIndex].mediaType == .IMAGE {
+                let currDuration = (Double(model.duration ?? "0") ?? 0)
+                itemModels[currItemModelIndex].materialDuraion = itemModels[currItemModelIndex].materialDuraion - currDuration
+                currentAssetProgress = CMTime(seconds: model.startTime, preferredTimescale: 1000)
+                // 更新进度
+                resetCurrentProgress()
+                for (index, item) in itemModels[currItemModelIndex].voiceStickers.enumerated() {
+                    if index >= isStopAtRecordRange, index > 0 {
+                        // 注:开始时间减去duration or 等一前一段录音的结束时间
+//                        item.startTime = item.startTime - currDuration
+                        item.startTime = itemModels[currItemModelIndex].voiceStickers[index - 1].endTime
+                        item.endTime = item.startTime + (Double(item.duration ?? "0") ?? 0)
+                    }
+                }
+                // 重绘录音进度视图
+                indirectionView?.resetAllSubViews(items: itemModels[currItemModelIndex].voiceStickers, percenWidth: progressThumV.thumbImageWidth / 2.0, totalDuration: itemModels[currItemModelIndex].materialDuraion)
+            }
             searchStopAtRecordRange()
             searchStopAtRecordRange()
             deleteTitles(voiceModel: model)
             deleteTitles(voiceModel: model)
         }
         }
@@ -1580,7 +1600,11 @@ public extension BFRecordScreenController {
                 if (recordItem?.endTime ?? 0) >= (self?.itemModels[self?.currItemModelIndex ?? 0].voiceStickers.last?.endTime ?? 0) {
                 if (recordItem?.endTime ?? 0) >= (self?.itemModels[self?.currItemModelIndex ?? 0].voiceStickers.last?.endTime ?? 0) {
                     self?.isEndPlay = true
                     self?.isEndPlay = true
                     self?.pause()
                     self?.pause()
+                    // 注:矫正进度--播放结束后当前指针应该到当前素材总时长
+                    self?.currentAssetProgress = CMTime(seconds: self?.itemModels[self?.currItemModelIndex ?? 0].materialDuraion ?? 0, preferredTimescale: 1000)
+                    self?.resetCurrentProgress()
                 } else {
                 } else {
+                    // 注:矫正进度--一段录音播放结束后当前指针应该到当前录音结束点
                     self?.currentAssetProgress = CMTime(seconds: recordItem?.endTime ?? 0, preferredTimescale: 1000)
                     self?.currentAssetProgress = CMTime(seconds: recordItem?.endTime ?? 0, preferredTimescale: 1000)
                     // 当开始播放时重置录音播放起始时间
                     // 当开始播放时重置录音播放起始时间
                     self?.recordStartPlayTime = self?.currentAssetProgress ?? CMTime.zero
                     self?.recordStartPlayTime = self?.currentAssetProgress ?? CMTime.zero
@@ -1607,7 +1631,7 @@ public extension BFRecordScreenController {
             resetCurrentProgress()
             resetCurrentProgress()
         }
         }
     }
     }
-    
+
     /// 重置进度
     /// 重置进度
     func resetCurrentProgress() {
     func resetCurrentProgress() {
         DispatchQueue.main.async { [weak self] in
         DispatchQueue.main.async { [weak self] in

+ 9 - 12
BFRecordScreenKit/Classes/RecordScreen/View/BFIndirectionProgressView.swift

@@ -14,20 +14,20 @@ class BFIndirectionProgressView: UIView {
     var indirecColor: UIColor = UIColor.clear
     var indirecColor: UIColor = UIColor.clear
     var themeColor: UIColor = UIColor.hexColor(hexadecimal: "#28BE67")
     var themeColor: UIColor = UIColor.hexColor(hexadecimal: "#28BE67")
     var progressHeight: CGFloat = 6
     var progressHeight: CGFloat = 6
-    var tmpPercentW : CGFloat = 0
+    var tmpPercentW: CGFloat = 0
     var percenWidth: CGFloat {
     var percenWidth: CGFloat {
         get {
         get {
-            if tmpPercentW <= 0 && totalDuration > 0 {
+            if tmpPercentW <= 0, totalDuration > 0 {
                 return frame.width / totalDuration
                 return frame.width / totalDuration
-            }else{
-                return  tmpPercentW
+            } else {
+                return tmpPercentW
             }
             }
-            
         }
         }
-        set{
+        set {
             tmpPercentW = newValue
             tmpPercentW = newValue
         }
         }
     }
     }
+
     var totalDuration: Float64 = 0
     var totalDuration: Float64 = 0
     var currentItem: UIView? // 当前的Item
     var currentItem: UIView? // 当前的Item
 
 
@@ -42,9 +42,6 @@ class BFIndirectionProgressView: UIView {
         self.totalDuration = totalDuration
         self.totalDuration = totalDuration
         self.progressHeight = progressHeight
         self.progressHeight = progressHeight
         self.percenWidth = percenWidth
         self.percenWidth = percenWidth
-//        if self.percenWidth <= 0, totalDuration > 0 {
-//            self.percenWidth = frame.width / totalDuration
-//        }
     }
     }
 
 
     required init?(coder _: NSCoder) {
     required init?(coder _: NSCoder) {
@@ -63,8 +60,8 @@ class BFIndirectionProgressView: UIView {
         subviews.forEach { vv in
         subviews.forEach { vv in
             vv.removeFromSuperview()
             vv.removeFromSuperview()
         }
         }
- 
-        items?.forEach {[weak self] model in
+
+        items?.forEach { [weak self] model in
             _ = createItemView(minX: model.startTime * CGFloat(self?.percenWidth ?? 0), width: (model.endTime - model.startTime) * CGFloat(self?.percenWidth ?? 0))
             _ = createItemView(minX: model.startTime * CGFloat(self?.percenWidth ?? 0), width: (model.endTime - model.startTime) * CGFloat(self?.percenWidth ?? 0))
         }
         }
     }
     }
@@ -125,7 +122,7 @@ class BFIndirectionProgressView: UIView {
 
 
     /// 删除某个view
     /// 删除某个view
     /// - Parameter index: <#index description#>
     /// - Parameter index: <#index description#>
-    func deleteItem(index: Int = 0,isCurrent:Bool = false) {
+    func deleteItem(index: Int = 0, isCurrent: Bool = false, isImage _: Bool = false) {
         if isCurrent {
         if isCurrent {
             currentItem?.removeFromSuperview()
             currentItem?.removeFromSuperview()
             currentItem = nil
             currentItem = nil