252 lines
11 KiB
Swift
252 lines
11 KiB
Swift
//
|
||
// 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
|
||
}()
|
||
///广告View
|
||
fileprivate lazy var adContainerView:UIView = {
|
||
let adContainerView:UIView = .init(frame: .init(x: 0, y: 0, width: screen_Width, height: 300*width))
|
||
adContainerView.backgroundColor = .clear
|
||
return adContainerView
|
||
}()
|
||
private let MPPositive_LibraryTableViewCellID = "MPPositive_LibraryTableViewCell"
|
||
override func viewDidLoad() {
|
||
super.viewDidLoad()
|
||
setTitle("")
|
||
configure()
|
||
view.backgroundColor = .init(hex: "#000000")
|
||
MP_AdMobManager.shared.configureLibraryNativeAd(rootController: self)
|
||
MP_AdMobManager.shared.loadLibraryNativeAd()
|
||
MP_AdMobManager.shared.layoutLibraryNativeAd(in: adContainerView, index: 0)
|
||
MP_AdMobManager.shared.onLibraryNativeAdBlock = {
|
||
[weak adContainerView] in
|
||
guard let adContainerView = adContainerView else {return}
|
||
MP_AdMobManager.shared.layoutLibraryNativeAd(in: adContainerView, index: 0)
|
||
}
|
||
|
||
}
|
||
override func viewWillAppear(_ animated: Bool) {
|
||
super.viewWillAppear(animated)
|
||
reload()
|
||
}
|
||
override func viewWillDisappear(_ animated: Bool) {
|
||
super.viewWillDisappear(animated)
|
||
MP_AnalyticsManager.shared.me_b_pvAction()
|
||
}
|
||
//刷新列表
|
||
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(adContainerView)
|
||
adContainerView.snp.makeConstraints { make in
|
||
make.left.right.equalToSuperview()
|
||
make.top.equalTo(actionViews.snp.bottom).offset(20*width)
|
||
make.height.equalTo(0)
|
||
}
|
||
view.addSubview(tableView)
|
||
tableView.snp.makeConstraints { make in
|
||
make.left.right.bottom.equalToSuperview()
|
||
make.top.equalTo(adContainerView.snp.bottom).offset(35*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)
|
||
}
|
||
MP_AdMobManager.shared.showLibraryInterstitialAdIfAvailable(completion: nil)
|
||
}
|
||
}
|
||
//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)
|
||
}
|
||
}
|