杨锴
2024-11-06 63f7ed967433acee3ae8764c7a077e15c29c41f2
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
                        }