Browse Source

添加删除段落时 删除字幕逻辑

jsonwang 3 năm trước cách đây
mục cha
commit
d8807697b7

+ 37 - 1
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -15,9 +15,11 @@ import Photos
 import UIKit
 
 struct WithDrawModel {
-    var type: Int // 0:拖动; 1:预览播放暂停 2: 录音结束  3: 删除录音
+    var type: Int // 0:拖动; 1:预览播放暂停 2: 录音结束  3: 删除录音  4: 删除字幕
     var timestamp: Double
     var deletedVoices: [(PQVoiceModel, Int)]?
+    // add by ak 保存删除的字幕数据用于恢复
+    var deletedTittles:[(PQEditSubTitleModel,Int)]?
 }
 
 public class BFRecordScreenController: BFBaseViewController {
@@ -31,6 +33,7 @@ public class BFRecordScreenController: BFBaseViewController {
 
     var currItemModelIndex = 0
     public var itemModels = [BFRecordItemModel]()
+    //add by ak 当前的显示的字幕位置
     var showSubtitleIndex = 0
     //    var shouldPlayRecordIndex:Int = -1          // 当前应该播放的录音资源序号
     var currentPlayRecordIndex: Int = -1 // >= 0 :当前正在播放的录音资源序号; -3: 刚录音完,不需要播放录音; -1:初始化阶段
@@ -674,6 +677,34 @@ public class BFRecordScreenController: BFBaseViewController {
 
         audioSettingView.isHidden = false
     }
+ 
+    /// 删除指定段落的所有字幕 数据
+    /// - Parameter voiceModel: 删除的音频数据
+    func deleteTitles(voiceModel:PQVoiceModel){
+          BFLog(message: "itemModels[currItemModelIndex].titleStickers  删除前:\(itemModels[currItemModelIndex].titleStickers.count) model.startTime: \(voiceModel.startTime) model.end: \(voiceModel.endTime)")
+          for title in itemModels[currItemModelIndex].titleStickers {
+              if let index = itemModels[currItemModelIndex].titleStickers.firstIndex(of: title) {
+                  
+                  if title.timelineIn >= voiceModel.startTime && title.timelineOut <= voiceModel.endTime{
+                    
+                      //删除前数据存入缓存
+                      let sutbitle  = itemModels[currItemModelIndex].titleStickers[index]
+                      events.append(WithDrawModel(type: 4, timestamp: currentAssetProgress.seconds, deletedTittles: [(sutbitle,isStopAtRecordRange)]))
+                      
+                      itemModels[currItemModelIndex].titleStickers.remove(at: index)
+                      
+                  
+ 
+                  }
+         
+              }
+          }
+         BFLog(message: "itemModels[currItemModelIndex].titleStickers  删除后:\(itemModels[currItemModelIndex].titleStickers.count)")
+ 
+          //清空字幕UI
+         subtitleLabel.text = ""
+        
+    }
 
     @objc func deleteRecorded() {
         if isStopAtRecordRange != -1, isStopAtRecordRange < itemModels[currItemModelIndex].voiceStickers.count {
@@ -682,6 +713,9 @@ public class BFRecordScreenController: BFBaseViewController {
             drawOrUpdateRecordProgessLable()
             searchStopAtRecordRange()
             events.append(WithDrawModel(type: 3, timestamp: currentAssetProgress.seconds, deletedVoices: [(model, isStopAtRecordRange)]))
+     
+            deleteTitles(voiceModel: model)
+            
         }
     }
 
@@ -754,6 +788,7 @@ public class BFRecordScreenController: BFBaseViewController {
     @objc func withdrawAction() {
         pause()
         if let action = events.last {
+ 
             var jumpTime = action.timestamp
             if action.type == 2 {
                 // 撤销录制
@@ -855,6 +890,7 @@ public class BFRecordScreenController: BFBaseViewController {
         let elems = itemModels[currItemModelIndex].voiceStickers.enumerated().filter { elem in
             elem.1.startTime <= self.currentAssetProgress.seconds && elem.1.endTime > self.currentAssetProgress.seconds
         }
+        
         isEndPlay = false
 
         if elems.count > 0 {