Bladeren bron

添加工具视图

harry 3 jaren geleden
bovenliggende
commit
736202a3fa

+ 50 - 0
BFIntroduceToolView.swift

@@ -0,0 +1,50 @@
+//
+//  BFIntroduceToolView.swift
+//  BFRecordScreenKit
+//
+//  Created by 胡志强 on 2021/11/26.
+//
+
+import Foundation
+import UIKit
+
+class BFIntroduceToolView: UIView {
+    
+    var choosedToolHandle:((UIView) -> Void)?
+    
+    fileprivate let toolImgs = ["", "", ""]
+    
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+    
+    override init(frame: CGRect) {
+        super.init(frame: CGRect(x: 0, y: 0, width: 40, height: 40*toolImgs.count))
+        isUserInteractionEnabled = true
+        clipsToBounds = true
+        
+        for i in 0 ..< toolImgs.count {
+            let btn = UIButton(frame: CGRect(x: 0, y: i * 40, width: 40, height: 40))
+            btn.backgroundColor = UIColor.randomColor()
+            btn.setTitle("\(i)", for: .normal)
+            btn.setImage(imageInRecordScreenKit(by: toolImgs[i]), for: .normal)
+            btn.addTarget(self, action: #selector(toolAction(btn:)), for: .touchUpInside)
+            addSubview(btn)
+        }
+        
+        
+        
+    }
+    
+    @objc func toolAction(btn:UIButton) {
+        let v = UILabel(frame: CGRect(x: 0, y: 0, width: 10, height: 40))
+        v.backgroundColor = UIColor.white
+        v.layer.shadowColor = UIColor.black.cgColor
+        v.layer.shadowRadius = 3
+            
+        choosedToolHandle?(v)
+    
+        
+    }
+    
+}

+ 26 - 4
BFRecordScreenKit/Classes/BFRecordScreenController.swift

@@ -17,10 +17,13 @@ public class BFRecordScreenController: BFBaseViewController {
     
     public var nextActionHandle:(()->Void)?
     public var closeActionHandle:(()->Void)?
+    
+    // MARK: - 录制参数
     public var asset:PHAsset?
+    
+    // 视频素材
     public var avasset:AVURLAsset?
     public var recordList:[PQVoiceModel] = [PQVoiceModel]()
-
     var assetPlayer:AVPlayer?       // 原视频音频播放器
     lazy var recordPlayer:AVAudioPlayer = {// 录音音频播放器
         let player = AVAudioPlayer()
@@ -30,7 +33,7 @@ public class BFRecordScreenController: BFBaseViewController {
     }()
     var movie :GPUImageMovie?       // 视频预览
     var playView :GPUImageView?     // 视频展示视图
-    var isDragingProgressSlder : Bool = false
+    var isDragingProgressSlder : Bool = false // 是否在拖动进度条
     
     //定义音频的编码参数
     let recordSettings:[String : Any] = [AVSampleRateKey : 44100.0, //声音采样率
@@ -67,6 +70,7 @@ public class BFRecordScreenController: BFBaseViewController {
         return manager
     }()
 
+    // MARK: - 视图参数
     var beginOnStartBtn:Bool = false
     var touchStart:CGPoint = CGPoint(x: 0, y: 0)
     var avplayerTimeObserver: NSKeyValueObservation?
@@ -133,7 +137,22 @@ public class BFRecordScreenController: BFBaseViewController {
         return btn
     }()
     
-    //MARK: -- 生命周期
+    lazy var toolV : BFIntroduceToolView = {
+        let toolV = BFIntroduceToolView()
+        toolV.centerY = view.centerY
+        
+        toolV.choosedToolHandle = {[weak self] tool in
+            guard let sself = self else {
+                return
+            }
+            tool.center = sself.view.center
+            sself.view.addSubview(tool)
+        }
+        
+        return toolV
+        
+    }()
+    //MARK: ------------------ 生命周期
     deinit {
         cleanMovieTarget()
         NotificationCenter.default.removeObserver(self)
@@ -160,9 +179,9 @@ public class BFRecordScreenController: BFBaseViewController {
         view.addSubview(playView!)
         fetchVideo()
         
-        
         view.addSubview(playBtn)
         view.addSubview(bottomeView)
+        view.addSubview(toolV)
         bottomeView.addSubview(recordBtn)
         bottomeView.addSubview(progessSilde)
         bottomeView.addSubview(closeBtn)
@@ -364,7 +383,10 @@ public class BFRecordScreenController: BFBaseViewController {
         cShowHUB(superView: nil, msg: "开始播放")
         assetPlayer?.volume = 0.5
         movie?.startProcessing()
+        let second = assetPlayer?.currentItem?.currentTime()
+        
         assetPlayer?.play()
+        assetPlayer?.seek(to: second ?? CMTime.zero)
         playRecord(at: CMTime.zero)
     }
     

+ 5 - 5
Example/BFRecordScreenKit.xcodeproj/project.pbxproj

@@ -27,7 +27,7 @@
 		4A426DA6274FA4E000B3733B /* IntroduceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntroduceController.swift; sourceTree = "<group>"; };
 		4A96F093274CF8DC008657DA /* PhotoVideoListController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoVideoListController.swift; sourceTree = "<group>"; };
 		5E394037E3C86B6D51A62719 /* Pods_BFRecordScreenKit_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_BFRecordScreenKit_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-		607FACD01AFB9204008FA782 /* 开讲.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "开讲.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+		607FACD01AFB9204008FA782 /* Introduce.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Introduce.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
 		607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
@@ -78,7 +78,7 @@
 		607FACD11AFB9204008FA782 /* Products */ = {
 			isa = PBXGroup;
 			children = (
-				607FACD01AFB9204008FA782 /* 开讲.app */,
+				607FACD01AFB9204008FA782 /* Introduce.app */,
 			);
 			name = Products;
 			sourceTree = "<group>";
@@ -166,7 +166,7 @@
 			);
 			name = BFRecordScreenKit_Example;
 			productName = BFRecordScreenKit;
-			productReference = 607FACD01AFB9204008FA782 /* 开讲.app */;
+			productReference = 607FACD01AFB9204008FA782 /* Introduce.app */;
 			productType = "com.apple.product-type.application";
 		};
 /* End PBXNativeTarget section */
@@ -471,7 +471,7 @@
 				MODULE_NAME = ExampleApp;
 				PRODUCT_BUNDLE_IDENTIFIER = "com.tzld.BFRecordScreenKit-Example";
 				PRODUCT_MODULE_NAME = "$(TARGET_NAME)";
-				PRODUCT_NAME = "开讲";
+				PRODUCT_NAME = Introduce;
 				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
 				SWIFT_VERSION = 4.0;
 			};
@@ -491,7 +491,7 @@
 				MODULE_NAME = ExampleApp;
 				PRODUCT_BUNDLE_IDENTIFIER = "com.tzld.BFRecordScreenKit-Example";
 				PRODUCT_MODULE_NAME = "$(TARGET_NAME)";
-				PRODUCT_NAME = "开讲";
+				PRODUCT_NAME = Introduce;
 				SWIFT_SWIFT3_OBJC_INFERENCE = Default;
 				SWIFT_VERSION = 4.0;
 			};