瀏覽代碼

修改录音指示条;

harry 3 年之前
父節點
當前提交
f8f3b89111

+ 20 - 0
BFRecordScreenKit/Classes/BFRecordItemModel.swift

@@ -0,0 +1,20 @@
+//
+//  BFRecordItemModel.swift
+//  BFRecordScreenKit
+//
+//  Created by 胡志强 on 2021/12/6.
+//
+
+import Foundation
+
+import BFFramework
+
+class BFRecordItemModel: NSObject {
+    var baseMaterial : AVURLAsset?
+    var dealDurationRanges = [CMTimeRange]()
+    var voiceStickers = [PQVoiceModel]()
+    var videoStickers = [PQEditVisionTrackMaterialsModel]()
+    var imageStickers = [PQEditVisionTrackMaterialsModel]()
+    var titleStickers = [PQEditSubTitleModel]()
+    
+}

+ 77 - 71
BFRecordScreenKit/Classes/BFRecordScreenController.swift

@@ -20,7 +20,8 @@ public class BFRecordScreenController: BFBaseViewController {
     public var closeActionHandle:(()->Void)?
     
     // MARK: - 录制参数
-    public var asset:PHAsset?
+    public var assets = [PHAsset]()
+    public var currAsset:PHAsset?
 //    var shouldPlayRecordIndex:Int = -1          // 当前应该播放的录音资源序号
     var currentPlayRecordIndex:Int = -1         // >= 0 :当前正在播放的录音资源序号; -3: 刚录音完,不需要播放录音; -1:初始化阶段
     var isRecording = false {                   // 是否正在录音
@@ -41,7 +42,9 @@ public class BFRecordScreenController: BFBaseViewController {
     var currentAssetProgress : CMTime = .zero   // 当前素材播放的进度
     // 视频素材
     public var avasset:AVURLAsset?
+    
     public var recordList:[PQVoiceModel] = [PQVoiceModel]()
+    
     var assetPlayer:AVPlayer?       // 原视频音频播放器
     var isCompletePlay = true
     var hadPrepareToPlayRecord = false    // 录音播放器准备
@@ -138,12 +141,12 @@ public class BFRecordScreenController: BFBaseViewController {
         return btn
     }()
     
-    lazy var progessSildeBackV : UIView = {
-        let vv = UIView()
-        vv.backgroundColor = .orange // .clear
-        
-        return vv
-    }()
+//    lazy var progessSildeBackV : UIView = {
+//        let vv = UIView()
+//        vv.backgroundColor = .orange // .clear
+//
+//        return vv
+//    }()
     
     lazy var withDrawBtn:UIButton = {
         let btn = UIButton(type: .custom)
@@ -253,7 +256,7 @@ public class BFRecordScreenController: BFBaseViewController {
         bottomeView.addSubview(withDrawBtn)
         bottomeView.addSubview(changeVoiceBtn)
         bottomeView.addSubview(progressThumV)
-        progressThumV.addSubview(progessSildeBackV)
+//        progressThumV.addSubview(progessSildeBackV)
 
         if checkStatus() {
             try? AVAudioSession.sharedInstance().setCategory(.playAndRecord, options: .defaultToSpeaker)
@@ -292,12 +295,12 @@ public class BFRecordScreenController: BFBaseViewController {
             make.top.equalTo(withDrawBtn).offset(6)
         }
         
-        progessSildeBackV.snp.makeConstraints { make in
-            make.left.equalToSuperview()
-            make.right.equalToSuperview()
-            make.bottom.equalToSuperview()
-            make.height.equalTo(8)
-        }
+//        progessSildeBackV.snp.makeConstraints { make in
+//            make.left.equalToSuperview()
+//            make.right.equalToSuperview()
+//            make.bottom.equalToSuperview()
+//            make.height.equalTo(8)
+//        }
         
         withDrawBtn.imageEdgeInsets = UIEdgeInsets(top: -withDrawBtn.imageView!.height, left: 0, bottom: 0, right: -withDrawBtn.titleLabel!.width);
         withDrawBtn.titleEdgeInsets = UIEdgeInsets(top: withDrawBtn.titleLabel!.height + 2, left: -withDrawBtn.imageView!.width, bottom: 0, right: 0);
@@ -393,6 +396,8 @@ public class BFRecordScreenController: BFBaseViewController {
     }
     @objc func withdrawAction(){
         pause()
+        recordList.removeLast()
+        drawOrUpdateRecordProgessLable()
     }
     
     @objc func changeVoiceAction(){
@@ -568,52 +573,53 @@ public class BFRecordScreenController: BFBaseViewController {
     }
     
     func fetchVideo(){
-        if let asset = self.asset {
-            let options = PHVideoRequestOptions()
-            options.isNetworkAccessAllowed = true
-            options.deliveryMode = .automatic
-            
-            PHImageManager.default().requestPlayerItem(forVideo:asset, options: options, resultHandler: { [weak self] playerItem, info in
+        if self.assets.count > 0 {
+            for (index, asset) in self.assets.enumerated() {
+                let options = PHVideoRequestOptions()
+                options.isNetworkAccessAllowed = true
+                options.deliveryMode = .automatic
+                
+                PHImageManager.default().requestPlayerItem(forVideo:asset, options: options, resultHandler: { [weak self] playerItem, info in
 
-                guard let item = playerItem else {
-                    cShowHUB(superView: nil, msg: "视频获取失败")
-                    return
-                }
-                self?.setAudioPlay(item: item)
-                self?.setVideoPlay(item: item)
+                    guard let item = playerItem else {
+                        cShowHUB(superView: nil, msg: "视频获取失败")
+                        return
+                    }
+                    if index == 0 {
+                        self?.setAudioPlay(item: item)
+                        self?.setVideoPlay(item: item)
+                    }
+                })
                 
-            })
-            
-            let option = PHImageRequestOptions()
-            option.isNetworkAccessAllowed = true //允许下载iCloud的图片
-            option.resizeMode = .fast
-            option.deliveryMode = .highQualityFormat
-            PHImageManager.default().requestImage(for: asset,
-                                           targetSize: self.view.bounds.size,
-                                          contentMode: .aspectFit,
-                                              options: option)
-            { (image, nil) in
-                 // 设置首帧/封面
-                if image != nil {
-                    let pic = GPUImagePicture(image: image)
-                    let filet = GPUImageFilter()
-                    pic?.addTarget(filet)
-                    filet.addTarget(self.playView)
-                    pic?.processImage()
-                }
-            }
-            
-            PHCachingImageManager().requestAVAsset(forVideo: asset, options: options, resultHandler: {[weak self] (asset: AVAsset?, audioMix: AVAudioMix?, info) in
-                if let urlass = asset as? AVURLAsset {
-                    self?.avasset = urlass
-                    DispatchQueue.main.async {[weak self] in
-                        self?.progressThumV.videoAsset = urlass
-                        self?.progressThumV.isHidden = false
-//                        self?.progessSildeBackV.setNeedsLayout()
-//                        self?.progessSildeBackV.layoutIfNeeded()
+//                let option = PHImageRequestOptions()
+//                option.isNetworkAccessAllowed = true //允许下载iCloud的图片
+//                option.resizeMode = .fast
+//                option.deliveryMode = .highQualityFormat
+//                PHImageManager.default().requestImage(for: asset,
+//                                               targetSize: self.view.bounds.size,
+//                                              contentMode: .aspectFit,
+//                                                  options: option)
+//                { (image, nil) in
+//                     // 设置首帧/封面
+//                    if image != nil {
+//                        let pic = GPUImagePicture(image: image)
+//                        let filet = GPUImageFilter()
+//                        pic?.addTarget(filet)
+//                        filet.addTarget(self.playView)
+//                        pic?.processImage()
+//                    }
+//                }
+                
+                PHCachingImageManager().requestAVAsset(forVideo: asset, options: options, resultHandler: {[weak self] (asset: AVAsset?, audioMix: AVAudioMix?, info) in
+                    if let urlass = asset as? AVURLAsset {
+                        self?.avasset = urlass
+                        DispatchQueue.main.async {[weak self] in
+                            self?.progressThumV.videoAsset = urlass
+                            self?.progressThumV.isHidden = false
+                        }
                     }
-                }
-            })
+                })
+            }
         }
 
     }
@@ -702,20 +708,20 @@ public class BFRecordScreenController: BFBaseViewController {
     }
     
     func drawOrUpdateRecordProgessLable(){
-        DispatchQueue.main.async {[weak self] in
-            self?.progessSildeBackV.subviews.forEach { vv in
-                vv.removeFromSuperview()
-            }
-            if let totalDur = self?.asset?.duration, totalDur > 0, let list = self?.recordList {
-                let width = self?.progessSildeBackV.width ?? 0
-                let height = self?.progessSildeBackV.height ?? 0
-                list.forEach { model in
-                    let lineV = UIView(frame: CGRect(x: model.startTime * width / totalDur , y: 0, width: (model.endTime - model.startTime) * width / totalDur, height: height))
-                    lineV.backgroundColor = ThemeStyleGreen()
-                    self?.progessSildeBackV.addSubview(lineV)
-                }
-            }
-        }
+//        DispatchQueue.main.async {[weak self] in
+//            self?.progessSildeBackV.subviews.forEach { vv in
+//                vv.removeFromSuperview()
+//            }
+//            if let totalDur = self?.currAsset?.duration, totalDur > 0, let list = self?.recordList {
+//                let width = self?.progessSildeBackV.width ?? 0
+//                let height = self?.progessSildeBackV.height ?? 0
+//                list.forEach { model in
+//                    let lineV = UIView(frame: CGRect(x: model.startTime * width / totalDur , y: 0, width: (model.endTime - model.startTime) * width / totalDur, height: height))
+//                    lineV.backgroundColor = ThemeStyleGreen()
+//                    self?.progessSildeBackV.addSubview(lineV)
+//                }
+//            }
+//        }
     }
 }
 

+ 0 - 0
BFVideoThumbProgressStrategy.swift → BFRecordScreenKit/Classes/BFVideoThumbProgressStrategy.swift


+ 0 - 0
BFRecordScreenKit/Classes/BFIntroduceToolView.swift → BFRecordScreenKit/Classes/View/BFIntroduceToolView.swift


+ 27 - 6
BFRecordScreenKit/Classes/BFVideoThumbProgressView.swift → BFRecordScreenKit/Classes/View/BFVideoThumbProgressView.swift

@@ -10,6 +10,7 @@ import UIKit
 import AVFoundation
 import BFCommonKit
 import SnapKit
+import BFUIKit
 
 class BFVideoThumbProgressView: UIView {
     var videoAsset : AVURLAsset? {
@@ -24,18 +25,23 @@ class BFVideoThumbProgressView: UIView {
                             self?.thumbImgs = images
                             DispatchQueue.main.async {[weak self] in
                                 if let sself = self{
+                                    var lastiv = UIImageView()
                                     for (i, img) in images.enumerated() {
                                         let iv = UIImageView(image: img)
                                         iv.contentMode = .scaleAspectFill
                                         iv.clipsToBounds = true
-                                        sself.progressView.addSubview(iv)
+                                        sself.progressView.contentView.addSubview(iv)
                                         iv.snp.makeConstraints { make in
                                             make.left.equalTo(CGFloat(i) * sself.thumbImageWidth + sself.width * 0.5)
-                                            make.top.height.equalToSuperview()
+                                            make.top.bottom.equalToSuperview()
+                                            make.height.equalTo(50)
                                             make.width.equalTo(sself.thumbImageWidth)
                                         }
+                                        lastiv = iv
+                                    }
+                                    lastiv.snp.makeConstraints { make in
+                                        make.right.equalTo(sself.width * -0.5)
                                     }
-                                    sself.progressView.contentSize = CGSize(width: CGFloat(images.count) *  sself.thumbImageWidth + sself.width, height: sself.height)
                                 }
                             }
                         }
@@ -65,8 +71,8 @@ class BFVideoThumbProgressView: UIView {
     
     var thumbImgs = [UIImage]()
     
-    lazy var progressView : UIScrollView = {
-        let sv = UIScrollView()
+    lazy var progressView : BFAutolayoutScrollView = {
+        let sv = BFAutolayoutScrollView()
         sv.bounces = false
         sv.backgroundColor = .clear
         sv.decelerationRate = .fast
@@ -75,11 +81,21 @@ class BFVideoThumbProgressView: UIView {
         
         return sv
     }()
+    
+    lazy var progessIndicateBackV : UIView = {
+        let vv = UIView()
+        vv.backgroundColor = .orange // .clear
+        
+        return vv
+    }()
+    
+    //MARK: - 生命周期
 
     override init(frame: CGRect) {
         super.init(frame: frame)
         addSubview(progressView)
-        
+        progressView.contentView.addSubview(progessIndicateBackV)
+
         let line = UIView()
         line.backgroundColor = .white
         line.layer.shadowColor = UIColor.black.cgColor
@@ -98,9 +114,14 @@ class BFVideoThumbProgressView: UIView {
     
     override func layoutSubviews() {
         super.layoutSubviews()
+        
         progressView.snp.makeConstraints { make in
             make.edges.equalToSuperview()
         }
+        progessIndicateBackV.snp.makeConstraints { make in
+            make.left.right.bottom.equalToSuperview()
+            make.height.equalTo(6)
+        }
         
     }
 }