From 63f7ed967433acee3ae8764c7a077e15c29c41f2 Mon Sep 17 00:00:00 2001
From: 杨锴 <841720330@qq.com>
Date: 星期三, 06 十一月 2024 21:17:19 +0800
Subject: [PATCH] fix bug

---
 XQMuse/Root/PayMusicView/PayMusicVC.swift |  116 +++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 82 insertions(+), 34 deletions(-)

diff --git a/XQMuse/Root/PayMusicView/PayMusicVC.swift b/XQMuse/Root/PayMusicView/PayMusicVC.swift
index 49a0c82..87d3bf2 100644
--- a/XQMuse/Root/PayMusicView/PayMusicVC.swift
+++ b/XQMuse/Root/PayMusicView/PayMusicVC.swift
@@ -28,6 +28,11 @@
 
 class PayMusicVC: BaseVC{
 
+    enum PayMuiscState {
+    case playing
+    case pause
+    }
+
 				private var coverImage:UIImageView!
 				private var label_name:UILabel!
 				private var btn_handle:UIButton!
@@ -37,7 +42,7 @@
 				private var meditationModel:MeditationModel?{
 								didSet{
 												if let m = meditationModel{
-																coverImage.sd_setImage(with: URL(string: m.coverUrl.jq_urlEncoded()),placeholderImage: UIImage(named: "login_top_bg"))
+                coverImage.sd_setImage(with: URL(string: m.coverUrl.components(separatedBy: ",").first!.jq_urlEncoded()),placeholderImage: UIImage(named: "login_top_bg"))
 																label_name.text = m.meditationTitle
 												}
 								}
@@ -75,6 +80,28 @@
 												make.centerY.equalToSuperview()
 								}
 
+        btn_handle = UIButton(type: .custom)
+        btn_handle.setImage(UIImage(named: "icon_play_purse"), for: .normal)
+        btn_handle.setImage(UIImage(named: "icon_play_small"), for: .selected)
+        btn_handle.addTarget(self, action: #selector(tapHandleAction), for: .touchUpInside)
+        view.addSubview(btn_handle)
+
+        btn_handleClose = UIButton(type: .custom)
+        btn_handleClose.setImage(UIImage(named: "icon_play_close"), for: .normal)
+        btn_handleClose.addTarget(self, action: #selector(closeAction), for: .touchUpInside)
+        view.addSubview(btn_handleClose)
+
+        let statckView = UIStackView(arrangedSubviews: [btn_handle,btn_handleClose])
+        statckView.axis = .horizontal
+        statckView.distribution = .equalSpacing
+        statckView.spacing = 18
+        view.addSubview(statckView)
+        statckView.snp.makeConstraints { make in
+            make.right.equalToSuperview().offset(-24.5)
+            make.centerY.equalToSuperview()
+            make.width.equalTo(73.5)
+        }
+
 								label_name = UILabel()
 								label_name.text = "--"
 								label_name.font = .systemFont(ofSize: 14.8, weight: .bold)
@@ -83,27 +110,7 @@
 								label_name.snp.makeConstraints { make in
 												make.left.equalTo(self.coverImage.snp.right).offset(17.5)
 												make.centerY.equalToSuperview()
-								}
-
-								btn_handle = UIButton(type: .custom)
-								btn_handle.setImage(UIImage(named: "icon_play_purse"), for: .normal)
-								btn_handle.setImage(UIImage(named: "icon_play_small"), for: .selected)
-								btn_handle.addTarget(self, action: #selector(tapHandleAction), for: .touchUpInside)
-								view.addSubview(btn_handle)
-
-								btn_handleClose = UIButton(type: .custom)
-								btn_handleClose.setImage(UIImage(named: "icon_play_close"), for: .normal)
-								btn_handleClose.addTarget(self, action: #selector(closeAction), for: .touchUpInside)
-								view.addSubview(btn_handleClose)
-
-								let statckView = UIStackView(arrangedSubviews: [btn_handle,btn_handleClose])
-								statckView.axis = .horizontal
-								statckView.distribution = .equalSpacing
-								statckView.spacing = 18
-								view.addSubview(statckView)
-								statckView.snp.makeConstraints { make in
-												make.right.equalToSuperview().offset(-24.5)
-												make.centerY.equalToSuperview()
+            make.right.equalTo(statckView.snp.left)
 								}
 				}
 
@@ -123,9 +130,25 @@
 																				make.bottom.equalToSuperview().offset(-(tabBarHeight))
 																}
 																vc.startRunloopAni()
-												}
+            }else{
+                PayMusicVC.updateStatus(.playing)
+            }
 								}
 				}
+
+    static func updateStatus(_ state:PayMuiscState){
+        if let tabBarVC = JQ_currentViewController().navigationController?.tabBarController as? BaseTabBarVC{
+            if let vc = tabBarVC.children.filter({$0 is PayMusicVC}).first as? PayMusicVC{
+                vc.btn_handle.isSelected = state == .pause
+                switch state {
+                    case .playing:
+                        MPNowPlayingInfoCenter.default().playbackState = .playing
+                    case .pause:
+                        MPNowPlayingInfoCenter.default().playbackState = .paused
+                }
+            }
+        }
+    }
 
     static func hidden(){
         if let tabBarVC = JQ_currentViewController().navigationController?.tabBarController as? BaseTabBarVC{
@@ -133,6 +156,7 @@
                 AudioPlayer.destroy()
                 vc.view.removeFromSuperview()
                 vc.removeFromParent()
+                MPNowPlayingInfoCenter.default().nowPlayingInfo = nil
             }
         }
     }
@@ -169,11 +193,13 @@
 												self.audioPlayer.bgmPlayer?.pause()
 												self.audioPlayer.masterPlayer?.pause()
 												self.stopRunloopAni()
+            PayMusicVC.updateStatus(.pause)
 								}else{
 												self.audioPlayer.bgmPlayer?.play()
 												self.audioPlayer.masterPlayer?.play()
             self.audioPlayer.masterPlayer?.volume = Float(UserDefaultSettingViewModel.getSetting()?.masterVolume ?? 0.5)
 												self.startRunloopAni()
+            PayMusicVC.updateStatus(.playing)
 								}
 				}
 
@@ -239,7 +265,15 @@
 								AudioPlayer.destroy()
 				}
 
-				func playBGMAt(firstPlayIndex:Int,model:MeditationModel,delegate:PayMusicDelegate?){
+    func playBGMAt(firstPlayIndex:Int,model:MeditationModel,delegate:PayMusicDelegate?,coverImage:UIImage? = nil){
+
+        //清除之前的
+        self.urls.removeAll()
+        self.masterPlayer?.pause()
+        self.bgmPlayer?.pause()
+        self.masterPlayer = nil
+        self.bgmPlayer = nil
+
 								self.delegate = delegate
 								self.playIndex = firstPlayIndex
 								self.meditationModel = model
@@ -263,7 +297,6 @@
 												self.bgmPlayer = AVPlayer(url: self.urls[firstPlayIndex])
 												self.bgmPlayer?.play()
 
-
 												if masterUrl != nil{
 																self.masterPlayer = AVPlayer(url: masterUrl!)
                 self.masterPlayer?.volume = Float(UserDefaultSettingViewModel.getSetting()?.masterVolume ?? 0.5)
@@ -286,9 +319,14 @@
 																				weakSelf.next()
 																				weakSelf.delegate?.playState(.next)
 																}else{
-																				weakSelf.delegate?.playState(.end)
-                    PayMusicVC.hidden()
-                    MPNowPlayingInfoCenter.default().nowPlayingInfo = nil
+                    weakSelf.bgmPlayer?.pause()
+                    weakSelf.playIndex = 0
+                    weakSelf.bgmPlayer?.replaceCurrentItem(with: AVPlayerItem(url: urls[0]))
+                    weakSelf.bgmPlayer?.play()
+
+//																				weakSelf.delegate?.playState(.end)
+//                    PayMusicVC.hidden()
+//                    MPNowPlayingInfoCenter.default().nowPlayingInfo = nil
 																}
 												}
 
@@ -305,14 +343,16 @@
 																let asset = weakSelf.bgmPlayer?.currentItem?.asset
 																dic[MPMediaItemPropertyPlaybackDuration] = CMTimeGetSeconds(asset!.duration)
 																dic[MPMediaItemPropertyArtwork] = MPMediaItemArtwork(boundsSize: CGSize(width: 50, height: 50), requestHandler: { s in
-																				return UIImage(named: "home_top_bg")!
+
+                    if let coverImage{
+                        return coverImage
+                    }else{
+                        return UIImage(named: "home_top_bg")!
+                    }
 																})
 																MPNowPlayingInfoCenter.default().nowPlayingInfo = dic
 												}
 								}
-
-								//播放完成
-//								NotificationCenter.default.addObserver(self, selector: #selector(playbackEnd), name:NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
 
 								setLockScreen()
 
@@ -326,6 +366,12 @@
 								}
 				}
 
+    func setBGMRate(value:CGFloat){
+        if let v = bgmPlayer?.currentItem?.duration.timescale,v > 0{
+            bgmPlayer?.seek(to: CMTime(seconds: value, preferredTimescale: v))
+        }
+    }
+
 				/// 播放场景音乐
 				func playSceneAt(_ url:String){
 								guard let URL = URL(string: url) else { return }
@@ -336,13 +382,13 @@
 								}else{
 												scenePlayer?.replaceCurrentItem(with: AVPlayerItem(url: URL))
 								}
-								DispatchQueue.main.asyncAfter(delay: 3.0) {
+        DispatchQueue.main.asyncAfter(delay: 0.5) {
 												self.scenePlayer?.play()
 												self.scenePlayer?.volume = Float(UserDefaultSettingViewModel.getSetting()?.volume ?? 0.5)
 								}
 
 								//播放完成
-//								NotificationCenter.default.addObserver(self, selector: #selector(playBGMbackEnd), name:NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
+								NotificationCenter.default.addObserver(self, selector: #selector(playBGMbackEnd), name:NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
 				}
 
 				func dellocScene(){
@@ -402,12 +448,14 @@
 								// 播放
 								center.playCommand.addTarget {[unowned self] event in
 												self.bgmPlayer?.play()
+            PayMusicVC.updateStatus(.playing)
 												return .success
 								}
 
 								// 暂停
 								center.pauseCommand.addTarget {[unowned self] event in
 												self.bgmPlayer?.pause()
+            PayMusicVC.updateStatus(.pause)
 												return .success
 								}
 

--
Gitblit v1.7.1