Bläddra i källkod

删除动作的撤销记录问题

harry 3 år sedan
förälder
incheckning
62c5b1b959

+ 36 - 18
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -58,9 +58,13 @@ public class BFRecordScreenController: BFBaseViewController {
         }
     }
 
-    var isEndPlay = false {
-        didSet {
-            recordBtn.isHidden = isEndPlay
+    var isEndPlay = false{
+        didSet{
+            if itemModels[currItemModelIndex].mediaType == .IMAGE{
+                recordBtn.isHidden = false
+            }else{
+                recordBtn.isHidden = isEndPlay
+            }
         }
     }
 
@@ -454,6 +458,7 @@ public class BFRecordScreenController: BFBaseViewController {
                     // 加入到语音数组里
                     model.endTime = sself.currentAssetProgress.seconds
 
+                    // ********** 开始处理冲突的录制部分
                     let newRange = CMTimeRange(start: CMTime(seconds: model.startTime, preferredTimescale: 1000), end: CMTime(seconds: model.endTime, preferredTimescale: 1000))
 
                     var deletedVoices = [(PQVoiceModel, Int)]()
@@ -463,22 +468,34 @@ public class BFRecordScreenController: BFBaseViewController {
 
                         if CMTimeRangeGetIntersection(originRange, otherRange: newRange).duration.seconds > 0 {
                             deletedVoices.append((m, i))
+                            for titleS in sself.itemModels[sself.currItemModelIndex].titleStickers {
+                                if titleS.audioFilePath == m.wavFilePath {
+                                    
+                                }
+                            }
+                            
                             continue
                         }
                     }
+                    
+                    // 删除冲突的音频
                     sself.itemModels[sself.currItemModelIndex].voiceStickers.removeAll { m in
                         let originRange = CMTimeRange(start: CMTime(seconds: m.startTime, preferredTimescale: 1000), end: CMTime(seconds: m.endTime, preferredTimescale: 1000))
                         return CMTimeRangeGetIntersection(originRange, otherRange: newRange).duration.seconds > 0
                     }
                     BFLog(1, message: "添加录音文件:\(model.startTime) -- \(model.endTime)")
-
-                    var event = sself.events.last
-                    if event != nil {
-                        event!.deletedVoices = deletedVoices
-                        sself.events.removeLast()
-                        sself.events.append(event!)
-                    }
+                    
                     sself.itemModels[sself.currItemModelIndex].voiceStickers.append(model)
+                    
+                    
+                    // ***********处理冲突的录音部分资源 end
+                    
+                    // 添加撤销记录点
+                    var event = WithDrawModel(type: 2, timestamp: model.startTime)
+                    event.deletedVoices = deletedVoices
+                    sself.events.append(event)
+                    
+                    
                     if sself.itemModels[sself.currItemModelIndex].mediaType == .IMAGE {
                         var duration: Double = 0
                         sself.itemModels[sself.currItemModelIndex].voiceStickers.forEach { temp in
@@ -498,7 +515,7 @@ public class BFRecordScreenController: BFBaseViewController {
                         // 矫正进度
                         self?.resetCurrentProgress()
                         self?.deleteRecordBtn.isHidden = true
-                        self?.recordBtn.isHidden = self?.isEndPlay ?? false
+                        self?.isEndPlay = self?.isEndPlay ?? false
                     }
                     sself.currentPlayRecordIndex = -3 // 刚录音完,不需要播放录音
                     // 重置录制开始时间
@@ -521,8 +538,6 @@ public class BFRecordScreenController: BFBaseViewController {
                 subtitleCount = self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers.count ?? 0
                 BFLog(2, message: "删除\(voiceModel?.wavFilePath ?? "")对应的字幕  后 count\(subtitleCount)")
 
-                // 取消录制以后重置进度
-                self?.withdrawAction()
                 // 重置录制开始时间
                 self?.recordStartTime = 0
                 /// 重置进度
@@ -831,7 +846,6 @@ public class BFRecordScreenController: BFBaseViewController {
         if !isDragingProgressSlder, isStopAtRecordRange != -1, isStopAtRecordRange < itemModels[currItemModelIndex].voiceStickers.count {
             let model = itemModels[currItemModelIndex].voiceStickers[isStopAtRecordRange]
             itemModels[currItemModelIndex].voiceStickers.remove(at: isStopAtRecordRange)
-            events.append(WithDrawModel(type: 3, timestamp: currentAssetProgress.seconds, deletedVoices: [(model, isStopAtRecordRange)]))
             indirectionView?.deleteItem(index: isStopAtRecordRange)
             // 注:删除录音后图片素材需要回撤指针进度,同时后面录音往前挪
             if itemModels[currItemModelIndex].mediaType == .IMAGE {
@@ -854,7 +868,12 @@ public class BFRecordScreenController: BFBaseViewController {
                 indirectionView?.resetAllSubViews(items: itemModels[currItemModelIndex].voiceStickers, percenWidth: progressThumV.thumbImageWidth / 2.0, totalDuration: itemModels[currItemModelIndex].materialDuraion)
             }
             searchStopAtRecordRange()
+            
             deleteTitles(voiceModel: model)
+            var event = WithDrawModel(type: 3, timestamp: currentAssetProgress.seconds, deletedVoices: [(model, isStopAtRecordRange)])
+            event.deletedTittles = nil
+            events.append(event)
+
         }
     }
 
@@ -888,8 +907,6 @@ public class BFRecordScreenController: BFBaseViewController {
         if recordStartTime <= 0 {
             recordStartTime = currentAssetProgress.seconds
         }
-        // 添加撤销记录点
-        events.append(WithDrawModel(type: 2, timestamp: model.startTime))
 
         isRecording = true
 
@@ -1302,8 +1319,9 @@ public class BFRecordScreenController: BFBaseViewController {
         subtitleBtn.isHidden = false
         soundSettingBtn.isHidden = false
         withDrawBtn.isHidden = false
-        recordBtn.isHidden = isEndPlay
-        //        movie?.cancelProcessing()
+        let su = self.isEndPlay
+        self.isEndPlay = su
+
         assetPlayer?.pause()
         recordPlayer?.pause()
         recordStartPlayTime = CMTime.zero

+ 1 - 0
BFRecordScreenKit/Classes/RecordScreen/View/BFIndirectionProgressView.swift

@@ -50,6 +50,7 @@ class BFIndirectionProgressView: UIView {
 
     /// 重绘view
     /// - Parameter items: <#items description#>
+    ///  - Parameter  percenWidth: 图片为固定值要传入,视频的话可以计算,也可以传入
     func resetAllSubViews(items: [PQVoiceModel]?, percenWidth: CGFloat = 0, totalDuration: Float64) {
         frame.size.width = superview?.bounds.width ?? 0
         self.totalDuration = totalDuration