188 lines
7.8 KiB
Swift
188 lines
7.8 KiB
Swift
//
|
||
// MPPositive_HomeViewController.swift
|
||
// MusicPlayer
|
||
//
|
||
// Created by Mr.Zhou on 2024/4/19.
|
||
//
|
||
|
||
import UIKit
|
||
|
||
class MPPositive_HomeViewController: MPPositive_BaseViewController{
|
||
//背景图片
|
||
private lazy var bgImageView:UIImageView = {
|
||
let imageView:UIImageView = .init(image: .init(named: "B_Home_BG'bg"))
|
||
imageView.contentMode = .scaleAspectFill
|
||
return imageView
|
||
}()
|
||
//菜单按钮
|
||
private lazy var memuBtn:UIButton = {
|
||
let btn = UIButton()
|
||
btn.setBackgroundImage(UIImage(named: "Home_Menu'logo"), for: .normal)
|
||
btn.addTarget(self, action: #selector(menuRightClick(_ :)), for: .touchUpInside)
|
||
return btn
|
||
}()
|
||
//tableView
|
||
private lazy var tableView:UITableView = {
|
||
let tableView = UITableView(frame: .init(x: 0, y: 0, width: screen_Width, height: screen_Height), style: .plain)
|
||
tableView.backgroundColor = .clear
|
||
tableView.separatorStyle = .none
|
||
tableView.estimatedRowHeight = 200
|
||
tableView.rowHeight = UITableView.automaticDimension
|
||
tableView.dataSource = self
|
||
tableView.delegate = self
|
||
tableView.register(MPPositive_HomeShowTableViewCell.self, forCellReuseIdentifier: MPPositive_HomeShowTableViewCellID)
|
||
tableView.contentInset = .init(top: 0, left: 0, bottom: 70*width, right: 0)
|
||
return tableView
|
||
}()
|
||
private let MPPositive_HomeShowTableViewCellID = "MPPositive_HomeShowTableViewCell"
|
||
// private var loadViewModel:MPPositive_BrowseLoadViewModel!
|
||
override func viewDidLoad() {
|
||
super.viewDidLoad()
|
||
setTitle("Musiclax")
|
||
confirgue()
|
||
//获取首页
|
||
MPPositive_BrowseLoadViewModel.shared.reloadBrowseLists()
|
||
NotificationCenter.notificationKey.add(observer: self, selector: #selector(reloadAction(_ :)), notificationName: .positive_browses_reload)
|
||
MP_HUD.loading()
|
||
errorBlock = {
|
||
[weak self] in
|
||
guard let self = self else {
|
||
return
|
||
}
|
||
//移除所有(除了navView)的子控件,并告知页面处理错误,提示用户重试
|
||
view.subviews.forEach { item in
|
||
if item != self.navView {
|
||
//移除
|
||
if item.superview != nil {
|
||
item.removeFromSuperview()
|
||
}
|
||
}
|
||
}
|
||
//添加报错View
|
||
setErrorView()
|
||
MP_HUD.hideNow()
|
||
}
|
||
retryBlock = {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
MP_HUD.loading()
|
||
DispatchQueue.main.async {
|
||
//获取首页
|
||
MPPositive_BrowseLoadViewModel.shared.reloadBrowseLists()
|
||
}
|
||
}
|
||
}
|
||
deinit {
|
||
NotificationCenter.default.removeObserver(self)
|
||
}
|
||
override func viewWillAppear(_ animated: Bool) {
|
||
super.viewWillAppear(animated)
|
||
|
||
}
|
||
override func viewWillDisappear(_ animated: Bool) {
|
||
super.viewWillDisappear(animated)
|
||
MP_AnalyticsManager.shared.home_b_pvAction()
|
||
}
|
||
//MARK: - UI生成与配置
|
||
//配置
|
||
private func confirgue() {
|
||
view.addSubview(bgImageView)
|
||
bgImageView.snp.makeConstraints { make in
|
||
make.top.right.left.equalToSuperview()
|
||
make.height.equalTo(981*width)
|
||
}
|
||
view.addSubview(tableView)
|
||
navView.addSubview(memuBtn)
|
||
memuBtn.snp.makeConstraints { make in
|
||
make.right.equalToSuperview().offset(-16*width)
|
||
make.centerY.equalToSuperview()
|
||
make.width.height.equalTo(24*width)
|
||
}
|
||
tableView.snp.makeConstraints { make in
|
||
make.top.equalTo(navView.snp.bottom).offset(32*width)
|
||
make.left.right.bottom.equalToSuperview()
|
||
}
|
||
|
||
}
|
||
//MARK: - 页面刷新
|
||
//页面刷新
|
||
@objc private func reloadAction(_ sender:Notification) {
|
||
DispatchQueue.main.async {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
if tableView.superview == nil {
|
||
confirgue()
|
||
}
|
||
removeErrorView()
|
||
MP_HUD.hideNow()
|
||
tableView.reloadData()
|
||
}
|
||
}
|
||
//MARK: - 点击
|
||
//点击顶部右侧弹出菜单
|
||
@objc private func menuRightClick(_ sender:UIButton) {
|
||
let setVC = MPSideA_SettingViewController()
|
||
navigationController?.pushViewController(setVC, animated: true)
|
||
}
|
||
}
|
||
//MARK: - tableView
|
||
extension MPPositive_HomeViewController: UITableViewDataSource, UITableViewDelegate {
|
||
func numberOfSections(in tableView: UITableView) -> Int {
|
||
return MPPositive_BrowseLoadViewModel.shared.browseModuleLists.count
|
||
}
|
||
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||
return 1
|
||
}
|
||
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||
let cell = tableView.dequeueReusableCell(withIdentifier: MPPositive_HomeShowTableViewCellID, for: indexPath) as! MPPositive_HomeShowTableViewCell
|
||
cell.browseViewModel = MPPositive_BrowseLoadViewModel.shared.browseModuleLists[indexPath.section]
|
||
if MPPositive_BrowseLoadViewModel.shared.browseModuleLists[indexPath.section].items.first?.browseItem.itemType == .single {
|
||
//是单曲视频
|
||
if MPPositive_BrowseLoadViewModel.shared.browseModuleLists[indexPath.section].items.first?.browseItem.pageType == "MUSIC_VIDEO_TYPE_OMV" {
|
||
cell.showType = .Fifth
|
||
}else {
|
||
cell.showType = .Frist
|
||
}
|
||
}else {
|
||
//是列表艺术家,当前只作为列表专辑使用
|
||
cell.showType = .Third
|
||
}
|
||
cell.requestNextBlock = {
|
||
[weak self] (item) in
|
||
guard let self = self else {return}
|
||
MP_AnalyticsManager.shared.home_b_module_clickAction(MPPositive_BrowseLoadViewModel.shared.browseModuleLists[indexPath.section].title)
|
||
switch item.browseItem.itemType {
|
||
case .single:
|
||
//单曲/视频跳转
|
||
MPPositive_Debouncer.shared.call {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
//触发next请求,优先获取列表全部单曲基础数据(不完善)
|
||
MP_NetWorkManager.shared.requestNextList(item.browseItem.playListId ?? "", videoId: item.browseItem.videoId ?? ""){ [weak self] listSongs in
|
||
guard let self = self else {return}
|
||
//回掉的数据并不完善,生成一个playerloadViewModel
|
||
let lodaViewModel = MPPositive_PlayerLoadViewModel(listSongs, currentVideoId: item.browseItem.videoId ?? "")
|
||
lodaViewModel.improveData(item.browseItem.videoId ?? "")
|
||
MP_PlayerManager.shared.loadPlayer = lodaViewModel
|
||
NotificationCenter.notificationKey.post(notificationName: .pup_player_vc)
|
||
}
|
||
}
|
||
case .list:
|
||
//列表专辑
|
||
let listVC = MPPositive_ListShowViewController(item.browseItem.browseId ?? "", params: item.browseItem.params ?? "", title: item.title ?? "", subtitle: item.subtitle ?? "")
|
||
navigationController?.pushViewController(listVC, animated: true)
|
||
default:
|
||
break
|
||
}
|
||
}
|
||
cell.findMoreBlock = {
|
||
[weak self] in
|
||
guard let self = self else {return}
|
||
let moreVC = MPPositive_MoreContentViewController()
|
||
moreVC.browseModuleList = MPPositive_BrowseLoadViewModel.shared.browseModuleLists[indexPath.section]
|
||
navigationController?.pushViewController(moreVC, animated: true)
|
||
}
|
||
return cell
|
||
}
|
||
}
|