// // MPPositive_LibraryViewController.swift // MusicPlayer // // Created by Mr.Zhou on 2024/4/19. // import UIKit class MPPositive_LibraryViewController: MPPositive_BaseViewController { //顶部图片 private lazy var topImageView:UIImageView = { let imageView:UIImageView = .init(image: .init(named: "Center_Top_bg")) imageView.contentMode = .scaleAspectFill return imageView }() //毛玻璃效果View private lazy var blurView:UIVisualEffectView = setBlurView() //阴影View private lazy var maskImageView:UIImageView = { let imageView:UIImageView = .init(image: .init(named: "Player'mask")) imageView.contentMode = .scaleAspectFill return imageView }() //标题Label private lazy var titleLabel:UILabel = createLabel("Your Library", font: .systemFont(ofSize: 32*width, weight: .regular), textColor: .white, textAlignment: .left) //新增按钮 private lazy var addBtn:UIButton = { let btn:UIButton = UIButton() btn.setBackgroundImage(UIImage(named: "Center_Add_'logo"), for: .normal) btn.addTarget(self, action: #selector(addClick(_:)), for: .touchUpInside) return btn }() ///收藏歌手Label private lazy var artistsLabel:UILabel = createLabel("0", font: .systemFont(ofSize: 12*width, weight: .light), textColor: .white, textAlignment: .center) ///收藏单曲Label private lazy var songsLabel:UILabel = createLabel("0", font: .systemFont(ofSize: 12*width, weight: .light), textColor: .white, textAlignment: .center) ///下载单曲Label private lazy var loadsLabel:UILabel = createLabel("0", font: .systemFont(ofSize: 12*width, weight: .light), textColor: .white, textAlignment: .center) ///事件View组 private lazy var actionViews:UIView = showTopView() ///tableView private lazy var tableView:UITableView = { let tableView = UITableView(frame: .init(x: 0, y: 0, width: screen_Width, height: screen_Height), style: .plain) if #available(iOS 15.0, *) { tableView.sectionHeaderTopPadding = 0 } tableView.backgroundColor = .clear tableView.separatorStyle = .none tableView.estimatedRowHeight = 200 tableView.rowHeight = UITableView.automaticDimension tableView.dataSource = self tableView.delegate = self tableView.register(MPPositive_LibraryTableViewCell.self, forCellReuseIdentifier: MPPositive_LibraryTableViewCellID) tableView.contentInset = .init(top: 0, left: 0, bottom: 70*width, right: 0) return tableView }() private let MPPositive_LibraryTableViewCellID = "MPPositive_LibraryTableViewCell" override func viewDidLoad() { super.viewDidLoad() setTitle("") configure() view.backgroundColor = .init(hex: "#000000") } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) reload() } //刷新列表 private func reload() { MPPositive_LoadCoreModel.shared.reloadCollectionListViewModels { [weak self] in guard let self = self else {return} tableView.showMessage(MPPositive_LoadCoreModel.shared.listViewModels.count, title: "No Lists") artistsLabel.text = "\(MPPositive_LoadCoreModel.shared.artistViewModels.count)" songsLabel.text = "\(MPPositive_LoadCoreModel.shared.songViewModels.count)" loadsLabel.text = "\(MPPositive_LoadCoreModel.shared.loadViewModels.count)" tableView.reloadData() } } ///新增 @objc private func addClick(_ sender:UIButton) { } private func configure() { view.addSubview(topImageView) topImageView.snp.makeConstraints { make in make.left.top.right.equalToSuperview() make.height.equalTo(291*width) } view.addSubview(blurView) blurView.snp.makeConstraints { make in make.left.top.right.equalToSuperview() make.height.equalTo(topImageView) } view.addSubview(maskImageView) maskImageView.snp.makeConstraints { make in make.left.right.equalToSuperview() make.bottom.equalTo(topImageView) make.height.equalTo(109*width) } navView.addSubview(titleLabel) titleLabel.snp.makeConstraints { make in make.left.equalToSuperview().offset(18*width) make.centerY.equalToSuperview() } view.addSubview(actionViews) actionViews.snp.makeConstraints { make in make.top.equalTo(navView.snp.bottom).offset(20*width) make.left.right.equalToSuperview() make.height.equalTo(70*width) } view.addSubview(tableView) tableView.snp.makeConstraints { make in make.left.right.bottom.equalToSuperview() make.top.equalTo(topImageView.snp.bottom).offset(-55*width) } //添加一个Label let label = UILabel() label.textColor = .white label.font = .systemFont(ofSize: 20, weight: .regular) label.text = "Love Lists" view.addSubview(label) label.snp.makeConstraints { make in make.left.equalToSuperview().offset(18*width) make.bottom.equalTo(tableView.snp.top).offset(-10*width) } } ///生成一个毛玻璃效果View,包含标题和说明 private func setBlurView() -> UIVisualEffectView { // 创建一个模糊效果 let blurEffect = UIBlurEffect(style: .dark) // 创建一个可交互的毛玻璃视图 let blurEffectView = UIVisualEffectView(effect: blurEffect) blurEffectView.alpha = 0.7 blurEffectView.isUserInteractionEnabled = true return blurEffectView } //返回顶部事件View组 private func showTopView() -> UIView { let topView = UIView() topView.backgroundColor = .clear //添加事件按钮 let first = actionView(artistsLabel, text: "Love_Artists_logo", tag: 0) topView.addSubview(first) first.snp.makeConstraints { make in make.centerY.equalToSuperview() make.height.equalTo(67*width) make.width.equalTo(90*width) make.centerX.equalToSuperview().multipliedBy(0.35) } let second = actionView(songsLabel, text: "Love_Song_logo", tag: 1) topView.addSubview(second) second.snp.makeConstraints { make in make.centerY.equalToSuperview() make.height.equalTo(67*width) make.width.equalTo(90*width) make.centerX.equalToSuperview() } let third = actionView(loadsLabel, text: "Offline_Songs_logo", tag: 2) topView.addSubview(third) third.snp.makeConstraints { make in make.centerY.equalToSuperview() make.height.equalTo(67*width) make.width.equalTo(90*width) make.centerX.equalToSuperview().multipliedBy(1.65) } topView.isUserInteractionEnabled = true return topView } //生成一个事件View块 private func actionView(_ label:UILabel, text:String, tag:Int) -> UIView { let actionView = UIView() actionView.backgroundColor = .clear let imageView:UIImageView = .init(image: .init(named: text)) imageView.contentMode = .scaleAspectFill actionView.addSubview(imageView) imageView.snp.makeConstraints { make in make.top.centerX.equalToSuperview() } actionView.addSubview(label) label.snp.makeConstraints { make in make.centerX.equalToSuperview() make.width.equalToSuperview().multipliedBy(0.8) make.bottom.equalToSuperview() } actionView.tag = tag actionView.isUserInteractionEnabled = true actionView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(actionClick(_:)))) return actionView } //事件点击方法 @objc private func actionClick(_ sender:UITapGestureRecognizer) { let tag = sender.view?.tag switch tag { case 0: let loveArtistsVC = MPPositive_LoveArtistsViewController() navigationController?.pushViewController(loveArtistsVC, animated: true) case 1: let loveSongsVC = MPPositive_LoveSongsViewController() navigationController?.pushViewController(loveSongsVC, animated: true) default: let offlineVC = MPPositive_OfflineSongsViewController() navigationController?.pushViewController(offlineVC, animated: true) } } } //MARK: - tableView extension MPPositive_LibraryViewController:UITableViewDataSource, UITableViewDelegate { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return MPPositive_LoadCoreModel.shared.listViewModels.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: MPPositive_LibraryTableViewCellID, for: indexPath) as! MPPositive_LibraryTableViewCell cell.listViewModel = MPPositive_LoadCoreModel.shared.listViewModels[indexPath.row] return cell } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let item = MPPositive_LoadCoreModel.shared.listViewModels[indexPath.row] //列表专辑 let listVC = MPPositive_ListShowViewController(item.collectionList.browseId ?? "", params: item.collectionList.params ?? "", title: item.title ?? "", subtitle: item.subtitle ?? "") navigationController?.pushViewController(listVC, animated: true) } }