Ver Fonte

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

* 'master' of https://git.yishihui.com/iOS/BFRecordScreenKit:
  1.录音播放结束重置录制按钮
  1.结束
harry há 3 anos atrás
pai
commit
0cf1e80be6

+ 6 - 3
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -1444,12 +1444,14 @@ public class BFRecordScreenController: BFBaseViewController {
             BFLog(3, message: "重置播放index-\(#function) = \(currentPlayRecordIndex)")
             NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: newItem, queue: .main) { [weak self] _ in
                 guard let sself = self else {
+                    BFLog(3, message: "sself为空AVPlayerItemDidPlayToEndTime")
                     return
                 }
                 sself.hadPrepareToPlayRecord = false
                 sself.currentPlayRecordIndex = -1
 //                sself.recordPlayer?.volume = 0
 //                sself.assetPlayer?.volume = sself.noSpeakVolume
+                BFLog(3, message: "播放结束")
                 didPlayToEndTime((shouldPlayRecordIndex, recordedAudio), newItem)
             }
             recordPlayerTimeObserver?.invalidate()
@@ -1466,9 +1468,9 @@ public class BFRecordScreenController: BFBaseViewController {
                 let progressTime = CMTime(seconds: CMTimeGetSeconds(time) - CMTimeGetSeconds(sself.currenStartPlayTime), preferredTimescale: 1000)
                 BFLog(message: "progressTime进度\(#function)-\(progressTime.seconds)")
                 periodicTimeObserver(progressTime, newItem)
-                if (rPlay.currentItem?.currentTime().seconds ?? 0) > (rPlay.currentItem?.duration.seconds ?? 0) - 0.1 {
-                    didPlayToEndTime((shouldPlayRecordIndex, recordedAudio), newItem)
-                }
+//                if (rPlay.currentItem?.currentTime().seconds ?? 0) > (rPlay.currentItem?.duration.seconds ?? 0) - 0.1 {
+//                    didPlayToEndTime((shouldPlayRecordIndex, recordedAudio), newItem)
+//                }
             } as? NSKeyValueObservation
         }
         if itemModels[currItemModelIndex].mediaType == .VIDEO {
@@ -2080,6 +2082,7 @@ public extension BFRecordScreenController {
                     self?.resetCurrentProgress()
                     // 录制播放结束后显示录制按钮
                     self?.recordBtn.isHidden = false
+                    self?.recordBtn.alpha = 1
                 } else {
                     // 注:矫正进度--一段录音播放结束后当前指针应该到当前录音结束点
                     self?.currentAssetProgress = CMTime(seconds: self?.itemModels[self?.currItemModelIndex ?? 0].voiceStickers[(recordInfo?.0 ?? 0) + 1].startCMTime.seconds ?? 0, preferredTimescale: 1000)

+ 52 - 50
BFRecordScreenKit/Classes/RecordScreen/View/BFVideoThumbProgressView.swift

@@ -31,19 +31,19 @@ class BFVideoThumbProgressView: UIView {
     var dragStartHandle: (() -> Void)?
     var isDrag = false
 
-    let thumbImageWidth : CGFloat = 70.0
+    let thumbImageWidth: CGFloat = 70.0
 
     let fetchThumbStrategy: BFVideoThumbProgressStrategyProtocol = BFVideoThumbProgressStrategy()
 
-    var progress: Double = 0 {  // 进度,秒为单位
+    var progress: Double = 0 { // 进度,秒为单位
         didSet {
             updateProgress(progress: progress)
         }
     }
 
     var thumbImgs = [UIImage]()
-    var lastImg :UIImageView?
-    
+    var lastImg: UIImageView?
+
     lazy var progressView: BFAutolayoutScrollView = {
         let sv = BFAutolayoutScrollView()
         sv.bounces = false
@@ -77,7 +77,7 @@ class BFVideoThumbProgressView: UIView {
             make.width.equalTo(3)
             make.center.height.equalToSuperview()
         }
-        
+
         progressView.contentView.addSubview(progessIndicateBackV)
         progessIndicateBackV.snp.makeConstraints { make in
             make.left.equalTo(width * 0.5)
@@ -104,11 +104,11 @@ class BFVideoThumbProgressView: UIView {
     func dealWithVideoThumb() {
         guard let videoAsset = recordItem?.videoAsset else {
             // 可能icloud资源没回来,清空原有内容
-            self.addThumbImages(images: [UIImage]())
+            addThumbImages(images: [UIImage]())
             return
         }
-        self.addThumbImages(images: recordItem!.thumbImgs)
-        if recordItem!.thumbImgs.count > 0{
+        addThumbImages(images: recordItem!.thumbImgs)
+        if recordItem!.thumbImgs.count > 0 {
             // 代表已经获取过了,不用在重新去获得
             progessIndicateBackV.snp.remakeConstraints { make in
                 make.left.equalTo(width * 0.5)
@@ -119,7 +119,7 @@ class BFVideoThumbProgressView: UIView {
             }
             return
         }
-        
+
         let date = Date()
         let dur = videoAsset.duration.seconds
         if dur > 0 {
@@ -131,24 +131,23 @@ class BFVideoThumbProgressView: UIView {
                 make.height.equalTo(6)
                 make.width.equalTo(CGFloat(count) * thumbImageWidth).priority(.high)
             }
-            
-            
-            recordItem!.splitVideoFileUrlFps(frames: count, firstImagesCount: Int(ceil(width/2.0/thumbImageWidth))) { [weak self, weak recordItem] hadGetAll, images in
+
+            recordItem!.splitVideoFileUrlFps(frames: count, firstImagesCount: Int(ceil(width / 2.0 / thumbImageWidth))) { [weak self, weak recordItem] hadGetAll, images in
                 guard let sself = self, let sitem = recordItem else {
                     return
                 }
 
-                BFLog(1, message: "获取缩略图:\(hadGetAll), \(Date().timeIntervalSince(date)), \( sitem.localPath ?? "aa")")
+                BFLog(1, message: "获取缩略图:\(hadGetAll), \(Date().timeIntervalSince(date)), \(sitem.localPath ?? "aa")")
                 sitem.thumbImgs.removeAll()
                 sitem.thumbImgs.append(contentsOf: images)
-                
+
                 // 不足数则补充足够帧数
-                while (hadGetAll && sitem.thumbImgs.count < count && images.count > 0) {
+                while hadGetAll, sitem.thumbImgs.count < count, images.count > 0 {
                     sitem.thumbImgs.append(images.last!)
                 }
                 if sitem.localPath == sself.recordItem!.localPath {
                     sself.addThumbImages(images: sitem.thumbImgs)
-                }else{
+                } else {
                     BFLog(1, message: "thumbImgs.count:\(sitem.thumbImgs.count)")
                 }
             }
@@ -175,7 +174,7 @@ class BFVideoThumbProgressView: UIView {
             }
             if images.count > 0 {
                 if let sself = self {
-                    if sself.lastImg != nil && sself.lastImg?.superview != nil {
+                    if sself.lastImg != nil, sself.lastImg?.superview != nil {
                         sself.lastImg?.removeFromSuperview()
                     }
                     for (i, img) in images.enumerated() {
@@ -203,31 +202,34 @@ class BFVideoThumbProgressView: UIView {
     }
 
     func appendThumb(progress: Double = 0) {
-        let count: Int = Int(progress / 2)
-        BFLog(message: "需要的图片个数:progress=\(progress),count=\(count)")
-        if recordItem?.mediaType == .IMAGE, (progressView.contentView.subviews.count - 6) < count {
-            guard let image = recordItem?.coverImg else {
-                return
-            }
-            if lastImg != nil && lastImg?.superview != nil  {
-                lastImg?.removeFromSuperview()
-            }
-            let lastIndex = progressView.contentView.subviews.count - 1
-            for i in lastIndex ... lastIndex + 10 {
-                let iv = UIImageView(image: image)
-                iv.contentMode = .scaleAspectFill
-                iv.clipsToBounds = true
-                progressView.contentView.addSubview(iv)
-                iv.snp.makeConstraints { make in
-                    make.left.equalTo(CGFloat(i) * CGFloat(thumbImageWidth) + width * 0.5)
-                    make.top.bottom.equalToSuperview()
-                    make.height.equalTo(50)
-                    make.width.equalTo(thumbImageWidth)
+        DispatchQueue.main.async { [weak self] in
+            guard let sslf = self else { return }
+            let count: Int = Int(progress / 2)
+            BFLog(message: "需要的图片个数:progress=\(progress),count=\(count)")
+            if sslf.recordItem?.mediaType == .IMAGE, (sslf.progressView.contentView.subviews.count - 6) < count {
+                guard let image = sslf.recordItem?.coverImg else {
+                    return
+                }
+                if sslf.lastImg != nil, sslf.lastImg?.superview != nil {
+                    sslf.lastImg?.removeFromSuperview()
+                }
+                let lastIndex = sslf.progressView.contentView.subviews.count - 1
+                for i in lastIndex ... lastIndex + 10 {
+                    let iv = UIImageView(image: image)
+                    iv.contentMode = .scaleAspectFill
+                    iv.clipsToBounds = true
+                    sslf.progressView.contentView.addSubview(iv)
+                    iv.snp.makeConstraints { make in
+                        make.left.equalTo(CGFloat(i) * CGFloat(sslf.thumbImageWidth) + sslf.width * 0.5)
+                        make.top.bottom.equalToSuperview()
+                        make.height.equalTo(50)
+                        make.width.equalTo(sslf.thumbImageWidth)
+                    }
+                    sslf.lastImg = iv
+                }
+                sslf.lastImg?.snp.makeConstraints { make in
+                    make.right.equalTo(sslf.width * -0.5)
                 }
-                lastImg = iv
-            }
-            lastImg?.snp.makeConstraints { make in
-                make.right.equalTo(width * -0.5)
             }
         }
     }
@@ -256,39 +258,39 @@ class BFVideoThumbProgressView: UIView {
 
 extension BFVideoThumbProgressView: UIScrollViewDelegate {
     func scrollViewDidScroll(_ scrollView: UIScrollView) {
-        let totalW = recordItem?.mediaType == .VIDEO ? (scrollView.contentSize.width - width) :  (CGFloat(recordItem?.materialDuraion ?? 0) * thumbImageWidth / 2.0)
+        let totalW = recordItem?.mediaType == .VIDEO ? (scrollView.contentSize.width - width) : (CGFloat(recordItem?.materialDuraion ?? 0) * thumbImageWidth / 2.0)
         if recordItem?.mediaType == .VIDEO {
             if isDrag {
-                dragScrollProgressHandle?(false, totalW > 0 ? Float((scrollView.contentOffset.x / totalW)) : 0)
+                dragScrollProgressHandle?(false, totalW > 0 ? Float(scrollView.contentOffset.x / totalW) : 0)
             }
         } else if recordItem?.mediaType == .IMAGE {
             if isDrag {
                 if scrollView.contentOffset.x > CGFloat(recordItem?.materialDuraion ?? 0) * thumbImageWidth / 2.0 {
                     scrollView.contentOffset = CGPoint(x: CGFloat(recordItem?.materialDuraion ?? 0) * thumbImageWidth / 2.0, y: 0)
                 }
-                dragScrollProgressHandle?(false, totalW > 0 ? Float((scrollView.contentOffset.x / totalW)) : 0)
+                dragScrollProgressHandle?(false, totalW > 0 ? Float(scrollView.contentOffset.x / totalW) : 0)
             }
         }
     }
 
     func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
         isDrag = true
-        let totalW = recordItem?.mediaType == .VIDEO ? (scrollView.contentSize.width - width) :  (CGFloat(recordItem?.materialDuraion ?? 0) * thumbImageWidth / 2.0)
+        let totalW = recordItem?.mediaType == .VIDEO ? (scrollView.contentSize.width - width) : (CGFloat(recordItem?.materialDuraion ?? 0) * thumbImageWidth / 2.0)
         dragStartHandle?()
-        dragScrollProgressHandle?(true, totalW > 0 ? Float((scrollView.contentOffset.x / totalW)) : 0)
+        dragScrollProgressHandle?(true, totalW > 0 ? Float(scrollView.contentOffset.x / totalW) : 0)
     }
 
     func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
         if !decelerate {
-            let totalW = recordItem?.mediaType == .VIDEO ? (scrollView.contentSize.width - width) :  (CGFloat(recordItem?.materialDuraion ?? 0) * thumbImageWidth / 2.0)
+            let totalW = recordItem?.mediaType == .VIDEO ? (scrollView.contentSize.width - width) : (CGFloat(recordItem?.materialDuraion ?? 0) * thumbImageWidth / 2.0)
             isDrag = false
-            dragEndHandle?(totalW > 0 ? Float((scrollView.contentOffset.x / totalW)) : 0)
+            dragEndHandle?(totalW > 0 ? Float(scrollView.contentOffset.x / totalW) : 0)
         }
     }
 
     func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
-        let totalW = recordItem?.mediaType == .VIDEO ? (scrollView.contentSize.width - width) :  (CGFloat(recordItem?.materialDuraion ?? 0) * thumbImageWidth / 2.0)
+        let totalW = recordItem?.mediaType == .VIDEO ? (scrollView.contentSize.width - width) : (CGFloat(recordItem?.materialDuraion ?? 0) * thumbImageWidth / 2.0)
         isDrag = false
-        dragEndHandle?(totalW > 0 ? Float((scrollView.contentOffset.x / totalW)) : 0)
+        dragEndHandle?(totalW > 0 ? Float(scrollView.contentOffset.x / totalW) : 0)
     }
 }