// // MPPositive_BottomShowView.swift // MusicPlayer // // Created by Mr.Zhou on 2024/4/19. // import UIKit import Kingfisher ///b面底部播放音乐展示View class MPPositive_BottomShowView: UIView { //绿色背景图片 private lazy var bgGreenImageView:UIImageView = UIImageView(image: .init(named: "BottomShow'bg")) //音乐封面展示圆框 private lazy var coverImageView:UIImageView = { let imageView:UIImageView = .init(frame: .init(x: 26*width, y: 13*width, width: 48*width, height: 48*width)) imageView.contentMode = .scaleAspectFill imageView.layer.cornerRadius = 24*width imageView.layer.masksToBounds = true return imageView }() //标题Label private lazy var titleLabel:UILabel = createLabel(font: .systemFont(ofSize: 16*width, weight: .semibold), textColor: .init(hex: "#000000"), textAlignment: .left) //副标题(歌手/专辑/乐队) private lazy var subtitleLabel:UILabel = createLabel(font: .systemFont(ofSize: 12*width, weight: .light), textColor: .init(hex: "#000000"), textAlignment: .left) //音乐列表按钮 private lazy var listsBtn:UIButton = { let btn = UIButton() btn.setBackgroundImage(UIImage(named: "Bottom Lists'logo"), for: .normal) btn.addTarget(self, action: #selector(expandListsClick(_ :)), for: .touchUpInside) return btn }() //音乐播放器状态按钮 private lazy var playStatuBtn:UIButton = { let btn = UIButton() btn.setBackgroundImage(UIImage(named: "Bottom Pause'logo"), for: .normal) btn.setBackgroundImage(UIImage(named: "Bottom Play'logo"), for: .selected) btn.addTarget(self, action: #selector(switchStatuClick(_ :)), for: .touchUpInside) return btn }() //展开音乐播放列表 var showListBlock:(() -> Void)? override init(frame: CGRect) { super.init(frame: frame) //添加一个监听 NotificationCenter.notificationKey.add(observer: self, selector: #selector(currentVideoSwitchAction(_:)), notificationName: .positive_player_reload) NotificationCenter.notificationKey.add(observer: self, selector: #selector(statusSwitchAction(_:)), notificationName: .switch_player_status) confirgue() } required init?(coder: NSCoder) { super.init(coder: coder) } deinit { NotificationCenter.default.removeObserver(self) } //配置 private func confirgue() { addSubview(bgGreenImageView) bgGreenImageView.snp.makeConstraints { make in make.left.right.top.bottom.equalToSuperview() } addSubview(coverImageView) addSubview(listsBtn) listsBtn.snp.makeConstraints { make in make.right.equalToSuperview().offset(-24*width) make.top.equalToSuperview().offset(21*width) make.height.width.equalTo(32*width) } addSubview(playStatuBtn) playStatuBtn.snp.makeConstraints { make in make.width.height.equalTo(24*width) make.centerY.equalTo(listsBtn) make.right.equalTo(listsBtn.snp.left).offset(-20*width) } addSubview(titleLabel) titleLabel.snp.makeConstraints { make in make.top.equalTo(coverImageView).offset(5*width) make.left.equalTo(coverImageView.snp.right).offset(12*width) make.right.equalTo(playStatuBtn.snp.left).offset(-10*width) } addSubview(subtitleLabel) subtitleLabel.snp.makeConstraints { make in make.left.equalTo(titleLabel) make.top.equalTo(titleLabel.snp.bottom).offset(4*width) make.right.equalTo(titleLabel) } } //切换当前播放音乐时会触发 @objc private func currentVideoSwitchAction(_ sender:Notification) { //更新显示的内容 DispatchQueue.main.async { [weak self] in guard let self = self else {return} if MP_PlayerManager.shared.loadPlayer?.currentVideo != nil { //存在当前播放音乐,更新显示 coverImageView.kf.setImage(with: MP_PlayerManager.shared.loadPlayer?.currentVideo.coverUrl, placeholder: placeholderImage) titleLabel.text = MP_PlayerManager.shared.loadPlayer?.currentVideo?.title ?? "" subtitleLabel.text = MP_PlayerManager.shared.loadPlayer?.currentVideo.subtitle ?? "" } } } //切换播放器状态时 @objc private func statusSwitchAction(_ sender:Notification) { if sender.object != nil { let state:MP_PlayerStateType = sender.object as! MP_PlayerStateType DispatchQueue.main.async { [weak self] in switch state { case .Playing: self?.playStatuBtn.isSelected = true default: self?.playStatuBtn.isSelected = false } } } } //展开当前音乐列表 @objc private func expandListsClick(_ sender:UIButton) { guard showListBlock != nil else { return } showListBlock!() } //切换播放音乐状态 @objc private func switchStatuClick(_ sender:UIButton) { guard MP_PlayerManager.shared.loadPlayer != nil else { return } //在当前音乐填充好之前,禁止触发点击 switch MP_PlayerManager.shared.getPlayState() { case .Null: //启动播放 MP_PlayerManager.shared.play() case .Playing: //播放中,进入暂停 MP_PlayerManager.shared.pause { [weak self] in } case .Pause: //暂停中,进入继续 MP_PlayerManager.shared.resume { [weak self] in } } } }