Kaynağa Gözat

搜素页面完毕

harry 3 yıl önce
ebeveyn
işleme
0fd0dcaa9f

+ 125 - 15
BFRecordScreenKit/Classes/RecordScreen/Controller/BFMusicSearchController.swift

@@ -9,18 +9,28 @@ import Foundation
 import BFUIKit
 import BFMediaKit
 import BFCommonKit
+import BFNetRequestKit
+import Alamofire
+
 
 class BFMusicSearchController: BFBaseViewController {
     
     var choseAction : ((PQVoiceModel?) -> Void)?
     
+    var cutActionCallback: ((PQVoiceModel) -> Void)?
+    
     var loadedTimeRangesObserver : NSKeyValueObservation?
 
-    var chosedCell : BFMuicInfoCell?
+    var chosedCell : BFMusicInfoSearchCell?
+    
+    var searchResults = [PQVoiceModel]()
+    
+    var currPage = 1
 
     // 试听音乐
     let player:AVPlayer = {
         let p = AVPlayer(playerItem: nil)
+        
         return p
     }()
     
@@ -40,19 +50,31 @@ class BFMusicSearchController: BFBaseViewController {
         
         let closeBtn = UIButton()
         closeBtn.setImage(imageInRecordScreenKit(by: "search_close"), for: .normal)
-        closeBtn.frame = CGRect(x: 18, y: statusBarHeight + 2, width: 40, height: 40)
+        closeBtn.frame = CGRect(x: 12, y: statusBarHeight + 2, width: 40, height: 40)
+        closeBtn.addTarget(self, action: #selector(closeAction), for: .touchUpInside)
         view.addSubview(closeBtn)
         
-        let searBar = UISearchBar(frame: CGRect(x: 62, y: statusBarHeight + 4, width: cScreenWidth - 62 - 18, height: 36))
-        searBar.barStyle = .black
-        searBar.prompt = "歌名/歌手名"
-        
-        view.addSubview(searBar)
-        
+        let searchTF = UITextField(frame: CGRect(x: 62, y: statusBarHeight + 4, width: cScreenWidth - 62 - 18, height: 36))
+        let leftv = UIView(frame: CGRect(x: 0, y: 0, width: 30, height: 20))
+        let iv = UIImageView(frame: CGRect(x: 6, y: 0, width: 20, height: 20))
+        iv.contentMode = .scaleAspectFit
+        iv.image = imageInRecordScreenKit(by: "search")
+        leftv.addSubview(iv)
+        searchTF.leftView = leftv
+        searchTF.leftViewMode = .always
+        searchTF.clearButtonMode = .whileEditing
+        searchTF.placeholder = "歌名/歌手名"
+        searchTF.delegate = self
+        searchTF.returnKeyType = .search
+        searchTF.textColor = UIColor.white
+        searchTF.backgroundColor = UIColor.hexColor(hexadecimal: "#1d1d1d")
+        searchTF.layer.cornerRadius = 18
+        view.addSubview(searchTF)
+
         view.addSubview(musicTb)
         musicTb.snp.makeConstraints { make in
             make.left.right.bottom.equalToSuperview()
-            make.top.equalTo(searBar.snp.bottom).offset(4)
+            make.top.equalTo(searchTF.snp.bottom).offset(4)
         }
         
         loadedTimeRangesObserver = player.observe(\AVPlayer.currentItem?.loadedTimeRanges, options: [.new, .initial]) { [weak self] (player, change) in
@@ -73,24 +95,41 @@ class BFMusicSearchController: BFBaseViewController {
         }
         
     }
+    
+    @objc func closeAction(){
+        self.dismiss(animated: true, completion: nil)
+    }
 }
 
 extension BFMusicSearchController : UITableViewDelegate, UITableViewDataSource {
     func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
-        return 4
+        return searchResults.count
     }
     
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let cell = tableView.dequeueReusableCell(withIdentifier: "BFMusicInfoSearchCell")
         
         if let cell = cell as? BFMusicInfoSearchCell{
+            cell.data = searchResults[indexPath.row]
+
             cell.useCallback = {[weak self] in
                 guard let wself = self else { return }
                 wself.choseAction?(cell.data)
                 wself.dismiss(animated: true, completion: nil)
             }
+            cell.cutCallBack = {[weak self] in
+                guard let wself = self else { return }
+                if let data = cell.data {
+                    wself.dismiss(animated: true) {[weak self] in
+                        guard let wself = self else { return }
+                        wself.cutActionCallback?(data)
+                    }
+                }
+            }
         }
         
+        cell?.selectionStyle = .none
+        
         return cell!
     }
     
@@ -99,10 +138,9 @@ extension BFMusicSearchController : UITableViewDelegate, UITableViewDataSource {
     }
     
     func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
-        if let cell = tableView.cellForRow(at: indexPath) as? BFMuicInfoCell {
-//
-//            chosedMusic = cell.data
-//            chosedMusic?.isSelected = true
+        
+        if let cell = tableView.cellForRow(at: indexPath) as? BFMusicInfoSearchCell {
+
             cell.changeSelected(true)
             
             chosedCell = cell
@@ -128,11 +166,83 @@ extension BFMusicSearchController : UITableViewDelegate, UITableViewDataSource {
     }
     
     func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
-        let cell = tableView.cellForRow(at: indexPath) as? BFMuicInfoCell
+        let cell = tableView.cellForRow(at: indexPath) as? BFMusicInfoSearchCell
         cell?.status = .normal
         cell?.changeSelected(false)
         
         chosedCell = nil
         player.pause()
     }
+    
+    // MARK: - 搜素接口
+    func requestSearchMusic(keyword: String, pageNum:Int) {
+        
+        BFNetRequestAdaptor.postRequestData(url: PQENVUtil.shared.materialSearchApi + searchBGMMaterialUrl, parames: ["keyWord": keyword, "pageNo": pageNum, "pageSize": 20], commonParams: commonParams(), encoding: JSONEncoding.default, isJsonEncodingNormal: true) { [weak self] response, _, error, _ in
+            DispatchQueue.global().async {[weak self] in
+                guard let wself = self else { return }
+                
+                var bgmList = [PQVoiceModel]()
+                if response is NSNull || response == nil {
+                    DispatchQueue.main.async {
+                        cShowHUB(superView: nil, msg: "搜索失败,请重试!")
+                    }
+                    return
+                }
+                let tempArr = (response as? [String: Any])?["entityList"] as? [[String: Any]]
+                if tempArr != nil {
+                    for item in tempArr! {
+                        let tempModel = PQVoiceModel(jsonDict: item)
+                        tempModel.volume = 30
+                        tempModel.voiceType = VOICETYPT.BGM.rawValue
+                        bgmList.append(tempModel)
+                    }
+                }
+                if pageNum == 1 {
+                    wself.searchResults.removeAll()
+                }
+                wself.searchResults.append(contentsOf: bgmList)
+                DispatchQueue.main.async {[weak self] in
+                    guard let wself = self else { return }
+                    
+                    if wself.searchResults.count > 0 {
+                        wself.musicTb.tableFooterView = UIView()
+                    }else{
+                        wself.musicTb.tableFooterView = wself.createNoDataView()
+                    }
+                    wself.musicTb.reloadData()
+                }
+            }
+        }
+    }
+    
+    func createNoDataView() -> UIView {
+        let back = UIView(frame: CGRect(x: 0, y: 0, width: cScreenWidth, height: 200))
+        
+        let l = UILabel(frame: CGRect(x: 40, y: 60, width: cScreenWidth - 80, height: 80))
+        l.text = "没有搜索到相关音乐\n换个词再试试吧"
+        l.textColor = UIColor.hexColor(hexadecimal: "#787878")
+        l.textAlignment = .center
+        l.numberOfLines = 2
+        l.font = UIFont.systemFont(ofSize: 17)
+        back.addSubview(l)
+        
+        return back
+    }
+}
+
+extension BFMusicSearchController : UITextFieldDelegate {
+    
+    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
+        if let keyword = textField.text, keyword.replacingOccurrences(of: " ", with: "", options: .literal, range: nil).count > 0 {
+            currPage = 1
+            requestSearchMusic(keyword: keyword, pageNum: 1)
+        }else{
+            cShowHUB(superView: nil, msg: "搜索不能为空")
+        }
+        
+        textField.resignFirstResponder()
+        return true
+    }
+    
+    
 }

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

@@ -105,6 +105,8 @@ class BFRecordScreenBaseManager : NSObject{
         DispatchQueue.global().async {
             GPUImageContext.sharedFramebufferCache().purgeAllUnassignedFramebuffers()
         }
+        NotificationCenter.default.removeObserver(self)
+
     }
     
     func checkCurrentPlayStatus(){
@@ -159,7 +161,6 @@ class BFRecordScreenBaseManager : NSObject{
             playBGMPlayer.play()
         }
         
-        
     }
     
     deinit {

+ 1 - 1
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenCameraManager.swift

@@ -671,9 +671,9 @@ class BFRecordScreenCameraManager: BFRecordScreenBaseManager {
         filter.removeTarget(movieWrite)
         filter.removeTarget(rendView)
         camera?.removeTarget(filter)
-
         camera?.stopCapture()
 
+        
         super.clean()
     }
 

+ 43 - 8
BFRecordScreenKit/Classes/RecordScreen/Controller/BFRecordScreenController.swift

@@ -541,6 +541,12 @@ public class BFRecordScreenController: BFBaseViewController {
 //                                
 //                            }
                         }
+                        
+                        vc.cutActionCallback = {[weak self] voiceModel in
+                            guard let wself = self else { return }
+                            
+                            wself.showCutView(voiceModel)
+                        }
                         wself.present(vc, animated: true, completion: nil)
                     }
                 }
@@ -560,10 +566,27 @@ public class BFRecordScreenController: BFBaseViewController {
             }
             
             UIView.animate(withDuration: 0.25, animations: hiddAnimation, completion: nextAction)
+        }
+        
+        vv.cutActionCallback = {[weak self] voiceModel in
             
-            
+            UIView.animate(withDuration: 0.25) {[weak self] in
+                guard let wself = self else { return }
+                
+                wself.choseMusicPanel.frame = CGRect(x: 0, y: cScreenHeigth, width: cScreenWidth, height: cScreenHeigth - 200)
+                
+                wself.soundSettingBtn.isHidden = false
+                wself.cameraFlipBtn.isHidden = false
+                wself.voiceSettingBtn.isHidden = false
+                wself.subtitleBtn.isHidden = false
+                wself.addMusicBtn.isHidden = false
+            } completion: {[weak self] _ in
+                guard let wself = self else { return }
+                wself.showCutView(voiceModel)
+            }
 
         }
+        
         return vv
     }()
 
@@ -817,7 +840,7 @@ public class BFRecordScreenController: BFBaseViewController {
                 
         view.addSubview(bottomeView)
 //        view.addSubview(subtitleLabel)
-//        view.addSubview(addMusicBtn)
+        view.addSubview(addMusicBtn)
         view.addSubview(choseMusicPanel)
         
         view.addSubview(playBtn)
@@ -1025,12 +1048,12 @@ public class BFRecordScreenController: BFBaseViewController {
             make.height.equalTo(adapterWidth(width: 180))
         }
         
-//        addMusicBtn.snp.makeConstraints { make in
-//            make.centerX.equalToSuperview()
-//            make.top.equalTo(soundSettingBtn).offset(-8)
-//            make.width.equalTo(100)
-//            make.height.equalTo(32)
-//        }
+        addMusicBtn.snp.makeConstraints { make in
+            make.centerX.equalToSuperview()
+            make.top.equalTo(soundSettingBtn).offset(-8)
+            make.width.equalTo(100)
+            make.height.equalTo(32)
+        }
 
         progreddL.snp.makeConstraints { make in
             make.width.equalTo(100)
@@ -1430,6 +1453,18 @@ public class BFRecordScreenController: BFBaseViewController {
     //    }
 
     // MARK: - 按钮事件响应
+    
+    func showCutView(_ model:PQVoiceModel) {
+        let v = UIView(frame: CGRect(x: 0, y: cScreenHeigth, width: cScreenWidth, height: 100))
+        v.backgroundColor = .green
+        view.addSubview(v)
+        DispatchQueue.main.async {
+            UIView.animate(withDuration: 0.2) {
+                // 显示裁剪视图
+                v.frame = CGRect(x: 0, y: cScreenHeigth - 100, width: cScreenWidth, height: 100)
+            }
+        }
+    }
 
     override public func backBtnClick() {
         //add by ak 删除变音文件

+ 7 - 3
BFRecordScreenKit/Classes/RecordScreen/View/BFChooseMusicView.swift

@@ -21,7 +21,8 @@ enum BFChooseMusicViewClickType {
 class BFChooseMusicView: UIView {
     
     var clickBtnAction: ((BFChooseMusicViewClickType) -> Void)?
-    
+    var cutActionCallback: ((PQVoiceModel) -> Void)?
+
     // 各类别音乐列表,以类别id为key
     var musicArray = [Int64 : [PQVoiceModel]]()
     
@@ -294,8 +295,11 @@ extension BFChooseMusicView:UITableViewDelegate, UITableViewDataSource {
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let cell = tableView.dequeueReusableCell(withIdentifier: "BFMuicInfoCell", for: indexPath) as! BFMuicInfoCell
         cell.selectionStyle = .none
-        cell.cutCallBack = {
-            // 调用裁剪UIView
+        cell.cutCallBack = {[weak self, weak cell] in
+            guard let wself = self else { return }
+            if let data = cell?.data {
+                wself.cutActionCallback?(data)
+            }
         }
         if let tagid = categories[categorySelectIndex].tagId, let arr = musicArray[tagid] {
             cell.data = arr[indexPath.row]

+ 3 - 1
BFRecordScreenKit/Classes/RecordScreen/View/Cell/BFMuicInfoCell.swift

@@ -175,5 +175,7 @@ class BFMuicInfoCell: UITableViewCell {
         audioStateView.layer.removeAllAnimations()
     }
     
-    
+    deinit {
+        stopLoading()
+    }
 }

+ 3 - 3
BFRecordScreenKit/Classes/RecordScreen/View/Cell/BFMusicInfoSearchCell.swift

@@ -14,12 +14,12 @@ class BFMusicInfoSearchCell: BFMuicInfoCell {
     
     override func showFunctionBtn() {
         
-        let useBtn = createCutBtn()
+        let useBtn = createUseBtn()
         contentView.addSubview(useBtn)
         useBtn.snp.makeConstraints { make in
             make.right.equalTo(-18)
             make.width.height.equalTo(40)
-            make.top.equalTo(1)
+            make.top.equalTo(12)
         }
         
         let cutBtn = createCutBtn()
@@ -27,7 +27,7 @@ class BFMusicInfoSearchCell: BFMuicInfoCell {
         cutBtn.snp.makeConstraints { make in
             make.right.equalTo(useBtn.snp.left).offset(-10)
             make.width.height.equalTo(40)
-            make.top.equalTo(1)
+            make.top.equalTo(12)
         }
     }