jsonwang 3 lat temu
rodzic
commit
8f2a1a2d4b

+ 2 - 1
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenBaseManager.swift

@@ -24,6 +24,7 @@ class BFRecordScreenBaseManager : NSObject{
     var recordItem : BFRecordItemModel?{
         didSet{
             progressThumV?.recordItem = recordItem
+            progressThumV?.progress = .zero
         }
     }
     
@@ -78,7 +79,7 @@ class BFRecordScreenBaseManager : NSObject{
     }
     
     func recordFinished(isSuccess:Bool){
-        
+        progressThumV?.recordItem = recordItem
     }
     
     func dragEnd(){

+ 8 - 7
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenCameraManager.swift

@@ -273,6 +273,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
                 if let img = wself.videoModel.thumImgs?.last{
                     wself.cameraProgressV?.changeSepline(img: img)
                 }
+                wself.coculationTotalDur()
             }else {
                 wself.videoModel.locationPath = "nil"
                 wself.recordEndCallBack?(false, nil)
@@ -317,12 +318,6 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
         recordFinishedResult = isSuccess
         gropQueue.leave()
     }
-    
-    func dealCamera(_ isSuccess: Bool) {
-        
-        
-    }
-    
 
     override func deleteRecord(at: CMTime) {
         if let videoS = recordItem?.videoStickers.enumerated().first(where: { mod in
@@ -366,13 +361,19 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
                 }
             }
             
-            item.materialDuraion = item.videoStickers.last?.timelineCMOut ?? .zero
+            coculationTotalDur()
 
         }
         changeRecordMaterail()
         BFLog(1, message: "delete: video- \(recordItem?.videoStickers.count ?? 0), voice-\(recordItem?.voiceStickers.count ?? 0)")
     }
     
+    func coculationTotalDur(){
+        recordItem?.materialDuraion = recordItem?.voiceStickers.reduce(.zero, { partialResult, voice in
+            voice.endCMTime - voice.startCMTime + partialResult
+        }) ?? .zero
+    }
+    
     // 录制失败 , 不足一秒时恢复上一次状态
     func revertLast(_ modIndex : Int = -1){
         hadDeleteVideoOfFailed = true

+ 94 - 86
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -75,10 +75,6 @@ public class BFRecordScreenController: BFBaseViewController {
             
             if isSuccess,  let sticker = sticker{
                 wself.rscurrentManager.currentAssetProgress = sticker.timelineCMOut
-                let dur = wself.rscmanager.recordItem?.videoStickers.reduce(0, { partialResult, mod in
-                    (mod.timelineCMOut - mod.timelineCMIn).seconds + partialResult
-                })
-                wself.rscmanager.recordItem?.materialDuraion = CMTime(seconds: dur ?? 0, preferredTimescale: 1000)
 //                BFLog(1, message: "camera:\(sticker.timelineCMIn.seconds) ~ \(sticker.timelineCMOut.seconds)")
             }else{
                 wself.withdrawAction()
@@ -171,7 +167,6 @@ public class BFRecordScreenController: BFBaseViewController {
             rscurrentManager.progreddL = progreddL
             rscurrentManager.recordPlayer = recordPlayer
             rscurrentManager.progressThumV = progressThumV
-            progressThumV.recordItem = itemModel
             rscurrentManager.recordItem = itemModel
             rscurrentManager.resetEnv()
             if currMediaType == .Video {
@@ -1104,109 +1099,97 @@ public class BFRecordScreenController: BFBaseViewController {
             
             if let model = voideModel, FileManager.default.fileExists(atPath: model.wavFilePath ?? "") {
                 // 加入到语音数组里
-
                 model.endCMTime = wself.currentAssetProgress
-//                BFLog(1, message: "录音地址:\((model.wavFilePath ?? "").replacingOccurrences(of: documensDirectory, with: ""))")
+
                 BFLog(1, message: "   文件时长record:\(wself.rscmanager.recordItem?.voiceStickers.count ?? 0),   \(model.startCMTime.seconds) -- \(model.endCMTime.seconds), dur: \(model.endCMTime.seconds - model.startCMTime.seconds)")
-                wself.recordFinished((model.endCMTime.seconds - model.startCMTime.seconds) >= 1)
-                
+                                
                 /// 注:录音机回调的录音时长大于一秒,而业务逻辑计算的会小于一秒
                 if (model.endCMTime.seconds - model.startCMTime.seconds) < 1 {
                     // 取消录制
+                    wself.recordFinished(false)
                     return
                 }
-                // ********** 开始处理冲突的录制部分
-                let newRange = CMTimeRange(start: model.startCMTime, end: model.endCMTime)
-
-                var deletedVoices = [PQVoiceModel]()
-                // 要删除的字幕
-                var deletedTitlesTemp = [PQEditSubTitleModel]()
-
-                // 查找要删除的音频和字幕数据
-                for  m in wself.itemModels[wself.currItemModelIndex].voiceStickers {
-                    let originRange = CMTimeRange(start: m.startCMTime, end: CMTime(seconds: m.endCMTime.seconds - 0.02, preferredTimescale: 1000))
-                    if CMTimeRangeGetIntersection(originRange, otherRange: newRange).duration.seconds > 0 {
-                        deletedVoices.append(m)
-                        deletedTitlesTemp += wself.deleteTitles(voiceModel: m)
-                        continue
+
+                if wself.currMediaType == .Video {
+                    // ********** 开始处理冲突的录制部分
+                    wself.overrideRecordDeal(model: model)
+                    
+                }else if wself.currMediaType == .Image {
+
+                    if let recordItem = wself.rsimanager.recordItem {
+                        
+                        let duration = model.endCMTime - model.startCMTime
+                        
+                        recordItem.voiceStickers.forEach({ mod in
+                            if mod.startCMTime.seconds >= model.startCMTime.seconds {
+                                mod.startCMTime = mod.startCMTime + duration
+                                mod.endCMTime = mod.endCMTime + duration
+                            }
+                        })
+                        
+                        recordItem.voiceChangeStickers.forEach({ mod in
+                            if mod.startCMTime.seconds >= model.startCMTime.seconds {
+                                mod.startCMTime = mod.startCMTime + duration
+                                mod.endCMTime = mod.endCMTime + duration
+                            }
+                        })
+
+                        recordItem.titleStickers.forEach({ mod in
+                            if mod.timelineIn.seconds >= model.startCMTime.seconds {
+                                mod.timelineIn = mod.timelineIn + duration
+                                mod.timelineOut = mod.timelineOut + duration
+                            }
+                        })
                     }
                 }
-                // 删除冲突的音频
-                deletedVoices.forEach { m in
-                    wself.itemModels[wself.currItemModelIndex].voiceStickers.removeAll { tempM in
-                        m.wavFilePath == tempM.wavFilePath
-                    }
+                
+                wself.itemModels[wself.currItemModelIndex].voiceStickers.append(model)
+                wself.itemModels[wself.currItemModelIndex].voiceStickers.sort { m1, m2 in
+                    m1.startCMTime.seconds < m2.startCMTime.seconds
                 }
+                
+                // 录制结束manager处理
+                wself.recordFinished(true)
 
-                wself.itemModels[wself.currItemModelIndex].voiceStickers.append(model)
                 // 录制结束回调给主工程页面(埋点之类功能)
                 wself.recordEndHandle?(model)
-                // 如果是图片素材同时有需要删除的录音时需要调整录音文件开始结束时间
-                // warning: 图片录制的时候应该只能在结尾处录制
-                if wself.currMediaType == .Image {
-                    if deletedVoices.count > 0 {
-                        // 如果是图片先排序在计算区间
-                        wself.itemModels[wself.currItemModelIndex].voiceStickers = wself.itemModels[wself.currItemModelIndex].voiceStickers.sorted { voice1, voice2 in
-                            voice1.startCMTime.seconds < voice2.startCMTime.seconds
-                        }
-                        for (index, item) in wself.itemModels[wself.currItemModelIndex].voiceStickers.enumerated() {
-                            if index > 0 {
-                                // 注:开始时间减去duration or 等一前一段录音的结束时间
-                                let tempDuration = item.endCMTime.seconds - item.startCMTime.seconds
-                                item.startCMTime = CMTime(seconds: wself.itemModels[wself.currItemModelIndex].voiceStickers[index - 1].endCMTime.seconds, preferredTimescale: 1000)
-                                item.endCMTime = CMTime(seconds: item.startCMTime.seconds + tempDuration, preferredTimescale: 1000)
-                            }
-                            BFLog(1, message: "录制结束重新排序录音文件:\(index)-\(item.wavFilePath ?? "")-\(item.startCMTime.seconds)-\(item.endCMTime.seconds)-\(item.endCMTime.seconds - item.startCMTime.seconds)")
-                        }
-                    }
-                }
-                // ***********处理冲突的录音部分资源 end
 
                 if wself.currMediaType != .Video {
-                    var duration: CMTime = .zero
-                    if wself.currMediaType == .Image{
-                        wself.itemModels[wself.currItemModelIndex].voiceStickers.forEach { temp in
-                            BFLog(1, message: "录制结束-最终:\(temp.wavFilePath ?? "")-\(temp.startCMTime.seconds)-\(temp.endCMTime.seconds)-\(temp.endCMTime.seconds - temp.startCMTime.seconds)")
-                            temp.duration = "\(temp.endCMTime.seconds - temp.startCMTime.seconds)"
-                            duration = duration + temp.endCMTime - temp.startCMTime
-                        }
-                        wself.itemModels[wself.currItemModelIndex].materialDuraion = duration
-                    }
-                    
                     wself.isEndPlay = true
-                    // 录制结束显示播放按钮
-                    if wself.currMediaType == .Camera {
-                        wself.playBtn.isSelected = true
-                        wself.playBtn.isHidden = true
-                    }else {
-                        wself.playBtn.isSelected = wself.itemModels[wself.currItemModelIndex].voiceStickers.count <= 0
-                        wself.playBtn.isHidden = wself.playBtn.isSelected
-                    }
                 }
+                
                 DispatchQueue.main.async { [weak self] in
                     guard let wself = self else { return }
 
-                    // 录音完,重绘撤销按钮,更新录音按钮,
+                    // 更新playbtn按钮状态
+                    wself.updatePlayBtnStatus()
+                        
+                    // 更新录音按钮状态
+                    wself.updateRecordBtnStatus(false)
+
+                    // 录音完,更新撤销按钮
                     wself.changeWithDrawBtnLayout(2)
+                    
                     // 注:在录制结束时矫正当前位置,避免跟指针无法对其
                     wself.indirectionView?.resetCurrentItem(start: model.startCMTime.seconds, end: model.endCMTime.seconds)
-                    if deletedVoices.count > 0 {
-                        /// 重绘录音进度视图
-                        wself.resetAllIndirectionView()
-                    }
+
+                    // 重置底部蓝色录音条
+                    wself.resetAllIndirectionView()
+                    
                     // 矫正进度
                     wself.resetCurrentProgress()
-                    wself.deleteRecordBtn.isHidden = true
-                    wself.recordBtn.isHidden = (wself.currMediaType != .Video && (wself.isEndPlay )) ? false : (wself.isEndPlay )
                 }
+
                 wself.currentPlayRecordIndex = -3 // 刚录音完,不需要播放录音
                 BFLog(3, message: "重置播放index-\(#function) = \(wself.currentPlayRecordIndex)")
                 recorderManager?.voiceModel = nil
+                
             } else {
                 wself.rscurrentManager.recordFinished(isSuccess: false)
                 BFLog(2, message: "数据出错!!!!\(voideModel?.wavFilePath ?? "")")
             }
         }
+        
         recorderManager?.cancelRecordHandle = { [weak self] voiceModel in
             guard let wself = self else { return }
             // 取消录制
@@ -1231,7 +1214,6 @@ public class BFRecordScreenController: BFBaseViewController {
                 cShowHUB(superView: wself.view, msg: msg)
             }
         }
-
     }
 
     @objc func editSubtitle() {
@@ -1832,15 +1814,18 @@ public class BFRecordScreenController: BFBaseViewController {
             
         case .Video:
             playBtn.isSelected = false
-            playBtn.isHidden = false
+            playBtn.isHidden = playBtn.isSelected
+            
         case .Camera:
             playBtn.isSelected = isEndPlay ? true : ((rscmanager.recordItem?.voiceStickers.count ?? -1) <= 0)
             playBtn.isHidden = playBtn.isSelected
         }
     }
     
-    func updateRecordBtnStatus(_ show:Bool? = nil){
-        let su = show ?? false
+    /// 更新录音按钮状态
+    /// - Parameter hidden: 是否隐藏
+    func updateRecordBtnStatus(_ hidden:Bool? = nil){
+        let su = hidden ?? false
         switch currMediaType {
         case .Image:
             recordBtn.isHidden = (isEndPlay || canInsertVideo) ? false : su
@@ -1887,7 +1872,6 @@ public class BFRecordScreenController: BFBaseViewController {
                 changeWithDrawBtnLayout(event.type)
             } else {
                 changeWithDrawBtnLayout(0)
-                withDrawBtn.isEnabled = false
             }
             searchStopAtRecordRange()
             let itemModel = itemModels[currItemModelIndex]
@@ -1899,14 +1883,34 @@ public class BFRecordScreenController: BFBaseViewController {
                     rscmanager.cameraProgressV?.progressView.contentOffset = CGPoint(x: currentAssetProgress.seconds * 70.0 / 5.0, y: 0)
                 }
             }
-            // 如果是图片需重置播放按钮
-            if itemModel.mediaType != .Video {
-                playBtn.isSelected = itemModels[currItemModelIndex].voiceStickers.count <= 0
-                playBtn.isHidden = playBtn.isSelected
-            }
+
         }
     }
     
+    func overrideRecordDeal(model: PQVoiceModel){
+        // ********** 开始处理冲突的录制部分
+        let newRange = CMTimeRange(start: model.startCMTime, end: model.endCMTime)
+
+        var deletedVoices = [PQVoiceModel]()
+        // 要删除的字幕
+        var deletedTitlesTemp = [PQEditSubTitleModel]()
+
+        // 查找要删除的音频和字幕数据
+        for  m in itemModels[currItemModelIndex].voiceStickers {
+            let originRange = CMTimeRange(start: m.startCMTime, end: CMTime(seconds: m.endCMTime.seconds - 0.02, preferredTimescale: 1000))
+            if CMTimeRangeGetIntersection(originRange, otherRange: newRange).duration.seconds > 0 {
+                deletedVoices.append(m)
+                deletedTitlesTemp += deleteTitles(voiceModel: m)
+                continue
+            }
+        }
+        // 删除冲突的音频
+        deletedVoices.forEach { m in
+            itemModels[currItemModelIndex].voiceStickers.removeAll { tempM in
+                m.wavFilePath == tempM.wavFilePath
+            }
+        }
+    }
 
     // MARK: - 权限申请
 
@@ -2369,7 +2373,7 @@ public class BFRecordScreenController: BFBaseViewController {
         }
 
         if isRecording {
-            let startTime = recorderManager?.voiceModel?.startCMTime.seconds ?? 0
+            let startTime = recorderManager?.voiceModel?.startCMTime ?? .zero
             let progress = (currentAssetProgress - (recorderManager?.voiceModel?.startCMTime ?? .zero)).seconds // - ratioX
             // 使用播放器的进度来画线,因为进度是跟着播放器来了
             DispatchQueue.main.async { [weak self] in
@@ -2385,11 +2389,15 @@ public class BFRecordScreenController: BFBaseViewController {
 
     // 撤销按钮修改title,重绘
     func changeWithDrawBtnLayout(_ type: Int) {
+        withDrawBtn.isEnabled = true
         switch type {
         case 3:
             withDrawBtn.setTitle("record_recover".BFLocale, for: .normal)
         case 2:
             withDrawBtn.setTitle("record_undo".BFLocale, for: .normal)
+        case 0:
+            withDrawBtn.isEnabled = false
+            fallthrough
         default:
             withDrawBtn.setTitle("record_back".BFLocale, for: .normal)
         }
@@ -2481,7 +2489,7 @@ public class BFRecordScreenController: BFBaseViewController {
         // 注:视频无法以录制进度驱动,因当录音开始录音时播放器还未播放,导致进度不一致
         // 注:在录制停止时,视频播放器进度依然在走,误差在80毫秒左右
         if isRecording, currMediaType == .Image {
-            let startTime = recorderManager?.voiceModel?.startCMTime.seconds ?? 0
+            let startTime = recorderManager?.voiceModel?.startCMTime ?? .zero
             // 使用播放器的进度来画线,因为进度是跟着播放器来了
             indirectionView?.setProgress(start: startTime, progress: progress)
         }

+ 7 - 2
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenImageManager.swift

@@ -69,8 +69,13 @@ class BFRecordScreenImageManager : BFRecordScreenBaseManager{
             /// 重绘录音进度视图
             dele?.resetAllIndirectionView()
         }
-
-        
+    }
+    
+    override func recordFinished(isSuccess: Bool) {
+        if isSuccess{
+            recordItem?.materialDuraion = recordItem?.voiceStickers.last?.endCMTime ?? .zero
+            
+        }
     }
     
     override func changeRecordMaterail() {}

+ 56 - 22
BFRecordScreenKit/Classes/RecordScreen/View/BFIndirectionProgressView.swift

@@ -62,41 +62,64 @@ class BFIndirectionProgressView: UIView {
             vv.removeFromSuperview()
         }
         
+        var lastM : PQVoiceModel?
+        var lastv : BFThumImageView?
         items?.forEach { [weak self] model in
-            _ = createItemView(minX: model.startCMTime.seconds * CGFloat(self?.percenWidth ?? 0), width: (model.endCMTime.seconds - model.startCMTime.seconds) * CGFloat(self?.percenWidth ?? 0))
+            
+            let v = createItemView(minX: model.startCMTime.seconds * CGFloat(self?.percenWidth ?? 0), width: (model.endCMTime.seconds - model.startCMTime.seconds) * CGFloat(self?.percenWidth ?? 0))
+//            BFLog(1, message: "equ:\((lastM?.endCMTime ?? .zero).seconds), \(model.startCMTime.seconds), \(CMTimeCompare(lastM?.endCMTime ?? .zero, model.startCMTime) < 0 ? "==" : "!=")")
+            if let lastM = lastM, CMTimeCompare(lastM.endCMTime, model.startCMTime) < 0 {
+                lastv?.isHiddenBord = true
+            }
+            lastM = model
+            lastv = v
         }
+        (subviews.last as? BFThumImageView)?.isHiddenBord = true
     }
 
     /// 设置进度
     /// - Parameters:
-    ///   - _: <#_ description#>
-    ///   - start: <#start description#>
-    ///   - progress: <#progress description#>
-    func setProgress(start: CGFloat = 0, progress: Float64) {
-//        BFLog(message: "录音进度--指示器Indir:progress=\(progress),duration=\(totalDuration),w=\(frame.width),perW=\(percenWidth),totalW:\(progress * percenWidth)")
-        if start * percenWidth >= frame.width {
+    ///   - _:
+    ///   - start: 开始录制的时间
+    ///   - progress: 当前录制时长
+    func setProgress(start: CMTime = .zero, progress: Float64) {
+        if start.seconds * percenWidth >= frame.width {
             frame.size.width = (superview as? UIScrollView)?.contentSize.width ?? 0
         }
+
         detectionAndCreateItem(start: start, progress: progress)
-        currentItem?.frame.size.width = progress < 0 ? 0 : progress * percenWidth
-        BFLog(message: "当前view:\(String(describing: currentItem))")
-        let vc = subviews.first { [weak self] sub in
-            (self?.currentItem?.frame.minX ?? 0) < sub.frame.minX && sub.frame.minX < (self?.currentItem?.frame.maxX ?? 0)
-        }
-        if vc != nil {
-            deletedView = vc
-            vc?.removeFromSuperview()
-            BFLog(message: "添加覆盖view-添加:deletedView = \(String(describing: deletedView))")
+        if let currentItem = currentItem {
+            let oldwidth = currentItem.frame.width
+            currentItem.frame.size.width = progress < 0 ? 0 : progress * percenWidth
+            BFLog(message: "当前view:\(String(describing: currentItem))")
+            
+            // 插入后后边的视图后移
+            subviews.forEach { subv in
+                if currentItem.frame.maxX < subv.frame.maxX {
+                    subv.frame = subv.frame.offsetBy(dx: (currentItem.width) - oldwidth, dy: 0)
+                }
+            }
         }
     }
 
     /// 检测并创建item
     /// - Parameter start: <#start description#>
-    func detectionAndCreateItem(start: CGFloat = 0, progress: Float64) {
+    func detectionAndCreateItem(start: CMTime = .zero, progress: Float64) {
         BFLog(message: "检测并创建item:\(start)")
         if currentItem == nil {
             deletedView = nil
-            currentItem = detectionItem(start: start, progress: progress)
+//            subviews[curr]
+            currentItem = createItemView(minX: start.seconds * percenWidth)
+            if subviews.count > 1 {
+                let vvs = subviews.sorted { v1, v2 in
+                    v1.rightX < v2.rightX
+                }
+                if let lastv = vvs.last(where: { vv in
+                    (vv != currentItem) && abs(vv.rightX - currentItem!.x) < 0.01
+                }) as? BFThumImageView {
+                    lastv.isHiddenBord = false
+                }
+            }
         }
     }
 
@@ -105,8 +128,8 @@ class BFIndirectionProgressView: UIView {
     ///   - start: <#start description#>
     ///   - progress: <#progress description#>
     /// - Returns: <#description#>
-    func detectionItem(start: CGFloat = 0, progress: Float64) -> BFThumImageView? {
-        let newRange = CMTimeRange(start: CMTime(seconds: start, preferredTimescale: 1000), end: CMTime(seconds: start + progress, preferredTimescale: 1000))
+    func detectionItem(start: CMTime = .zero, progress: Float64) -> BFThumImageView? {
+        let newRange = CMTimeRange(start: start, duration: CMTime(seconds: progress, preferredTimescale: 1000))
         var currentIndex: Int?
         for (index, item) in subviews.enumerated() {
             let originRange = CMTimeRange(start: CMTime(seconds: item.frame.minX / percenWidth, preferredTimescale: 1000), end: CMTime(seconds: item.frame.width / percenWidth, preferredTimescale: 1000))
@@ -116,11 +139,22 @@ class BFIndirectionProgressView: UIView {
             }
         }
         if currentIndex != nil {
-            BFLog(message: "检测存在重新创建")
+            BFLog(message: "检测存在取出")
             return subviews[currentIndex!] as? BFThumImageView
         } else {
             BFLog(message: "检测不存在重新创建:\(start)")
-            return createItemView(minX: start * percenWidth)
+            let v = createItemView(minX: start.seconds * percenWidth)
+            if subviews.count > 1 {
+                let vvs = subviews.sorted { v1, v2 in
+                    v1.rightX < v2.rightX
+                }
+                if let lastv = vvs.last(where: { vv in
+                    (vv.x < v.x) && (vv.rightX == v.x)
+                }) as? BFThumImageView {
+                    lastv.isHiddenBord = false
+                }
+            }
+            return v
         }
     }
 

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

@@ -9,6 +9,7 @@ import Foundation
 import UIKit
 
 class BFThumImageView: UIView {
+    
     var isHiddenBord = false{
         didSet{
             if let v = self.viewWithTag(12333){

+ 0 - 1
BFRecordScreenKit/Classes/RecordScreen/View/ProgressView/BFCameraProgressView.swift

@@ -94,7 +94,6 @@ class BFCameraProgressView: BFProgressBaseView {
                 wself.imageViews.insert(iv, at: ind)
             }
             
-
             wself.progressView.setNeedsLayout()
             wself.progressView.layoutIfNeeded()
             

+ 3 - 5
BFRecordScreenKit/Classes/RecordScreen/View/ProgressView/BFVideoThumbProgressView.swift

@@ -16,7 +16,7 @@ class BFVideoThumbProgressView: BFProgressBaseView {
     override var recordItem: BFRecordItemModel? {
         didSet {
             // 指针回归
-            progress = .zero
+//            progress = .zero
             
             if recordItem?.mediaType == .Video {
                 DispatchQueue.main.async {[weak self] in
@@ -162,7 +162,8 @@ class BFVideoThumbProgressView: BFProgressBaseView {
             addThumbImages(images: [UIImage]())
             return
         }
-        addThumbImages(images: Array(repeating: image, count: 10))
+        let count = (recordItem?.materialDuraion.seconds ?? 0) / 2.0 + (cScreenWidth / thumbImageWidth)
+        addThumbImages(images: Array(repeating: image, count: max(10, Int(count + 4))))
     }
 
     /// 添加缩略图
@@ -251,15 +252,12 @@ class BFVideoThumbProgressView: BFProgressBaseView {
         if recordItem?.mediaType == .Video {
             if let second = recordItem?.materialDuraion.seconds, second > 0 {
                 let w = progressView.contentSize.width - width
-//                BFLog(1, message: "录音进度--指示器:progress=\(progress),duration=\(second),w=\(w),perW=\(Double(w) / second),totalW:\(progress * Double(w) / second)")
                 progressView.contentOffset = CGPoint(x: progress * Double(w) / second, y: 0)
             }
         } else if recordItem?.mediaType == .Image {
-//            if (recordItem?.materialDuraion ?? 0) > progress {
             BFLog(message: "updateProgress:\(progress)")
             progressView.contentOffset = CGPoint(x: progress * thumbImageWidth / 2.0, y: 0)
             appendThumb(progress: progress)
-//            }
         }
     }
 }