浏览代码

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

* 'master' of https://git.yishihui.com/iOS/BFRecordScreenKit:
  编辑完字幕后刷新保存的数据
  1,录制时不显示字幕 2, 添加 LOG
harry 3 年之前
父节点
当前提交
9b66b0d00c

+ 21 - 10
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -30,6 +30,7 @@ public class BFRecordScreenController: BFBaseViewController {
 
     var currItemModelIndex = 0
     public var itemModels = [BFRecordItemModel]()
+    var showSubtitleIndex = 0
     //    var shouldPlayRecordIndex:Int = -1          // 当前应该播放的录音资源序号
     var currentPlayRecordIndex: Int = -1 // >= 0 :当前正在播放的录音资源序号; -3: 刚录音完,不需要播放录音; -1:初始化阶段
     var isRecording = false { // 是否正在录音
@@ -295,7 +296,7 @@ public class BFRecordScreenController: BFBaseViewController {
         subtitleLabel.text = test
 
         subtitleLabel.numberOfLines = 0
-        subtitleLabel.lineBreakMode = .byClipping
+        subtitleLabel.lineBreakMode = .byWordWrapping
         subtitleLabel.isUserInteractionEnabled = true
         subtitleLabel.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(editSubtitle)))
         return subtitleLabel
@@ -427,8 +428,14 @@ public class BFRecordScreenController: BFBaseViewController {
 
             self?.setSubtitleStyle(settingModel: subtitileModel.setting)
         }
-        subtitleEditView.editSubtitleDone = { [weak self] newtext in
+        subtitleEditView.editSubtitleDone = { [weak self] newtext ,index in
+            //1,刷新 UI
             self?.subtitleLabel.text = newtext
+            
+            self?.setSubtitleStyle(settingModel: (self?.subtitleSettingView.subtitle.setting)!)
+            
+            //更新数据
+            self?.itemModels[self?.currItemModelIndex ?? 0].titleStickers[index].text = newtext
         }
 
         layoutsubview()
@@ -440,22 +447,25 @@ public class BFRecordScreenController: BFBaseViewController {
         BFLog(message: "编辑字幕")
         subtitleEditView.isHidden = false
         subtitleEditView.textView.becomeFirstResponder()
-        subtitleEditView.setNewText(text: subtitleLabel.text ?? "")
+        subtitleEditView.setNewText(text: subtitleLabel.text ?? "",index: showSubtitleIndex)
     }
 
     /// 更新字幕,在回放时使用
     /// - Parameter time: 当前播放的进度
     func updateSubtitle(time: CMTime) {
         var findShowSubtitle: PQEditSubTitleModel?
-        for subtitle in itemModels[currItemModelIndex].titleStickers {
+        for (index,subtitle) in itemModels[currItemModelIndex].titleStickers.enumerated() {
             if subtitle.timelineIn <= CMTimeGetSeconds(time) * 1_000_000, subtitle.timelineOut >= CMTimeGetSeconds(time) * 1_000_000 {
                 findShowSubtitle = subtitle
                 BFLog(message: "找到要显示的字幕 in \(findShowSubtitle?.timelineIn ?? 0.0) out \(findShowSubtitle?.timelineOut ?? 0.0) text:\(findShowSubtitle?.text ?? "") currTime is \(CMTimeGetSeconds(time))")
+                showSubtitleIndex = index
                 break
             }
         }
         if findShowSubtitle != nil {
             subtitleLabel.text = findShowSubtitle?.text
+            setSubtitleStyle(settingModel: subtitleSettingView.subtitle.setting)
+            
         }
     }
 
@@ -470,7 +480,7 @@ public class BFRecordScreenController: BFBaseViewController {
             subtitleLabel.textColor = settingModel.fontColor
 
             let leftPoint: CGFloat = 37
-            let height = sizeWithText(text: subtitleLabel.text ?? "", font: UIFont.systemFont(ofSize: CGFloat(settingModel.subtitleSize * 375 / 1080)), size: CGSize(width: cScreenWidth - leftPoint * 2, height: 102))
+            let height = sizeWithText(text: subtitleLabel.text ?? "", font: UIFont.boldSystemFont(ofSize: CGFloat(settingModel.subtitleSize * 375 / 1080)), size: CGSize(width: cScreenWidth - leftPoint * 2, height: 102))
 
             // 下 //设置位置
             if subtitleSettingView.subtitle.setting.subtitlePoint == 0 {
@@ -1174,15 +1184,16 @@ extension BFRecordScreenController: PQSpeechTranscriberUtilDelegate {
 
         BFLog(message: "识别结果:dicResult is \(String(describing: dicResult)) \((payload?["result"])!)")
         DispatchQueue.main.async {
-            // 1,显示字幕
-//            self.subtitleLabel.text = ((payload?["result"]) as? String) ?? ""
-            self.setSubtitleStyle(settingModel: self.subtitleSettingView.subtitle.setting)
-
+       
             // 2,保存字幕数据
             let newSubtitle = PQEditSubTitleModel()
             newSubtitle.timelineIn = self.itemModels[self.currItemModelIndex].titleStickers.last?.timelineOut ?? 0
             // 当前已处理的音频时长,单位:毫秒。
-            newSubtitle.timelineOut = Float64(((payload?["time"]) as? Int) ?? 0) * 1_000_000
+             
+            newSubtitle.timelineOut = Float64(((payload?["time"]) as? Int) ?? 0) * 1_000.0 + (self.recorderManager.voiceModel?.startTime ?? 0.0) * 1_000_000.0
+            
+            BFLog(message: "添加字幕数据 timelineIn \(newSubtitle.timelineIn) timelineOut \(newSubtitle.timelineOut) text \(newSubtitle.text)")
+
             newSubtitle.text = ((payload?["result"]) as? String) ?? ""
             newSubtitle.setting = self.subtitleSettingView.subtitle.setting
 

+ 6 - 3
BFRecordScreenKit/Classes/RecordScreen/View/BFSubtitleEditView.swift

@@ -10,9 +10,11 @@ import BFMediaKit
 import BFUIKit
 import Foundation
 
-typealias EditSubtitleDone = (_ text: String) -> Void
+typealias EditSubtitleDone = (_ text: String,_ index:Int) -> Void
 
 class BFSubtitleEditView: UIView {
+    
+    var showSubtitleIndex = 0
     var editSubtitleDone: EditSubtitleDone?
 
 //    var settingModel:BFSubtitileSettingModel = BFSubtitileSettingModel.init()
@@ -91,11 +93,12 @@ class BFSubtitleEditView: UIView {
         textView.resignFirstResponder()
         if editSubtitleDone != nil {
             BFLog(message: "最后修改的文字为:\(String(describing: textView.text))")
-            editSubtitleDone!(textView.text)
+            editSubtitleDone!(textView.text,showSubtitleIndex)
         }
     }
 
-    func setNewText(text: String) {
+    func setNewText(text: String,index:Int) {
+        showSubtitleIndex = index
         textView.text = text.substring(to: 30)
 //        BFLog(message: "传值\(textView.text)")
 //