From 677497cbfbf159417f2b1bb64aee0196c9fa6382 Mon Sep 17 00:00:00 2001 From: 杨锴 <841720330@qq.com> Date: 星期一, 09 九月 2024 18:37:07 +0800 Subject: [PATCH] fix --- XQMuse/Root/Home/VC/BackgroundVoiceVC.swift | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 105 insertions(+), 4 deletions(-) diff --git a/XQMuse/Root/Home/VC/BackgroundVoiceVC.swift b/XQMuse/Root/Home/VC/BackgroundVoiceVC.swift index f1ee5b9..44adf7a 100644 --- a/XQMuse/Root/Home/VC/BackgroundVoiceVC.swift +++ b/XQMuse/Root/Home/VC/BackgroundVoiceVC.swift @@ -13,11 +13,52 @@ @IBOutlet weak var slider_voice: UISlider! @IBOutlet weak var collectionView: UICollectionView! - + + private var items = [BGMModel]() + private var settingModel = UserDefaultSettingViewModel.getSetting() + private var audioPlayer = AudioPlayer.getSharedInstance() + private var playAtIndex:IndexPath? + private var tempPlayer:AVPlayer? + private var isPlaying:Bool = false + + override func viewDidDisappear(_ animated: Bool) { + super.viewDidDisappear(animated) + audioPlayer.playBGM() + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + audioPlayer.pauseBGM() + } + override func viewDidLoad() { super.viewDidLoad() title = "心泉·疗愈" - + + slider_voice.isEnabled = false + slider_voice.value = Float(settingModel?.volume ?? 0.5) + slider_voice.addTarget(self, action: #selector(volumeChange(_:)), for: .valueChanged) + Services.getBGM().subscribe(onNext: {[unowned self]data in + if let m = data.data{ + self.items = m + self.slider_voice.isEnabled = true + self.collectionView.reloadData() + + DispatchQueue.main.asyncAfter(delay: 0.8) { + for (index,v) in m.enumerated(){ + if v.id == self.settingModel?.bgm?.id{ + self.playAtIndex = IndexPath(row: index, section: 0) + self.collectionView.scrollToItem(at: IndexPath(row: index, section: 0), at: .centeredHorizontally, animated: true) + break + } + } + self.collectionView.reloadData() + } + } + }).disposed(by: disposeBag) + + //播放完成 + NotificationCenter.default.addObserver(self, selector: #selector(playBGMbackEnd), name:NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil) } override func setUI() { @@ -39,19 +80,79 @@ collectionView.bounces = false collectionView.showsHorizontalScrollIndicator = false collectionView.register(UINib(nibName: "HomeRelaxVoiceCCell", bundle: nil), forCellWithReuseIdentifier: "_HomeRelaxVoiceCCell") - collectionView.scrollToItem(at: IndexPath(row: 2, section: 0), at: .centeredHorizontally, animated: true) collectionView.contentInset = UIEdgeInsets(top: 0, left: 100 , bottom: 0, right: 100) + } + + @objc func playBGMbackEnd(){ + isPlaying = false + collectionView.reloadData() + } + + @IBAction func setttingAction(_ sender: UIButton) { + if settingModel != nil{ + guard let index = playAtIndex else {return} + settingModel?.bgm = items[index.row] + settingModel?.volume = Double(slider_voice.value) + UserDefaultSettingViewModel.saveSetting(settingModel!) + audioPlayer.playBGMAt(items[index.row].audioFile) + alertSuccess(msg: "设置成功") + NotificationCenter.default.post(name: SetBGMSuccess_Noti, object: items[index.row]) + } + } + + @objc func volumeChange(_ slider:UISlider){ + tempPlayer?.volume = slider.value + } + + deinit{ + NotificationCenter.default.removeObserver(self, name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil) + } +} + +extension BackgroundVoiceVC:UIScrollViewDelegate{ + + func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { + let p = CGPoint(x: collectionView.contentOffset.x + collectionView.frame.size.width / 2, y:0) + if let v = collectionView.indexPathForItem(at: p){ + playAtIndex = v + } } } extension BackgroundVoiceVC:UICollectionViewDelegate & UICollectionViewDataSource{ + + func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + playAtIndex = indexPath + let model = items[indexPath.row] + collectionView.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true) + + guard let URL = URL(string: model.audioFile) else { return } + + tempPlayer = AVPlayer(url: URL) + tempPlayer?.volume = slider_voice.value + tempPlayer!.play() + isPlaying = true + collectionView.reloadData() + } + func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return 5 + return items.count + } + + func numberOfSections(in collectionView: UICollectionView) -> Int { + return 1 } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "_HomeRelaxVoiceCCell", for: indexPath) as! HomeRelaxVoiceCCell cell.contentView.backgroundColor = .jq_randomColor + cell.setModel(items[indexPath.row]) + + if isPlaying && indexPath == playAtIndex{ + cell.img_play.image = UIImage(named: "icon_play_purse") + }else{ + cell.img_play.image = UIImage(named: "icon_play") + } return cell } } -- Gitblit v1.7.1