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