Music_Player3/MusicPlayer/MP/MPPositive/ViewControllers/Home(首页,各项列表页,艺术家页)/MPPositive_ArtistShowViewController.swift
2024-05-29 17:31:45 +08:00

205 lines
8.1 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// MPPositive_ArtistShowViewController.swift
// MusicPlayer
//
// Created by Mr.Zhou on 2024/5/15.
//
import UIKit
class MPPositive_ArtistShowViewController: MPPositive_BaseViewController {
///
private lazy var headView:MPPositive_ArtistShowHeaderView = .init(frame: .init(x: 0, y: 0, width: screen_Width, height: 385*width))
///Label
private lazy var nameLabel:UILabel = {
let label:UILabel = createLabel(font: .systemFont(ofSize: 20*width, weight: .regular), textColor: .white, textAlignment: .left)
label.alpha = 0
return label
}()
//MARK: -
//View
private lazy var segmentView:JXSegmentedView = {
var jxSegmentView = JXSegmentedView()
jxSegmentView.backgroundColor = .init(hex: "1A1A1A")
return jxSegmentView
}()
//
private lazy var dataSource:JXSegmentedTitleDataSource = {
var dataSource = JXSegmentedTitleDataSource()
//
dataSource.titleNormalColor = .init(hex: "#666666")
dataSource.titleNormalFont = .systemFont(ofSize: 16*width, weight: .regular)
//
dataSource.titleSelectedColor = .init(hex: "#80F988")
dataSource.titleSelectedFont = .systemFont(ofSize: 16*width, weight: .bold)
//
dataSource.isTitleColorGradientEnabled = true
dataSource.isSelectedAnimable = true
dataSource.isItemTransitionEnabled = true
return dataSource
}()
//
private lazy var indicator:JXSegmentedIndicatorLineView = {
let indicator = JXSegmentedIndicatorLineView()
indicator.indicatorWidth = 16*width
indicator.indicatorHeight = 3*width
indicator.indicatorCornerRadius = 1.5*width
indicator.indicatorColor = .init(hex: "#80F988")
indicator.indicatorPosition = .bottom
indicator.verticalOffset = 5*width
return indicator
}()
///
fileprivate lazy var pagingView: JXPagingView = {
let pagingView = JXPagingView(delegate: self)
pagingView.backgroundColor = .clear
pagingView.isHidden = true
pagingView.mainTableView.backgroundColor = .clear
//
pagingView.mainTableView.bounces = false
return pagingView
}()
private var artist:MPPositive_ArtistViewModel!{
didSet{
if artist != nil {
pagingView.isHidden = false
//
headView.artistid = self.browseid
headView.artist = artist
//
dataSource.titles = artist.lists.compactMap({$0.title})
nameLabel.text = artist.header?.title
dataSource.reloadData(selectedIndex: 0)
segmentView.reloadData()
}
}
}
var browseid:String = ""
var iscollection:Bool = false
///
/// - Parameter browseId: Id
init(_ browseId:String) {
super.init(nibName: nil, bundle: nil)
browseid = browseId
//
MP_NetWorkManager.shared.requestArtist(browseId) { [weak self] result in
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
artist = result
}
}
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override func viewDidLoad() {
super.viewDidLoad()
setPopBtn()
setTitle("")
configure()
}
private func configure() {
segmentView.dataSource = dataSource
segmentView.indicators = [indicator]
view.addSubview(pagingView)
pagingView.snp.makeConstraints { make in
make.top.equalToSuperview()
make.left.right.bottom.equalToSuperview().priority(999)
}
segmentView.listContainer = pagingView.listContainerView
pagingView.listContainerView.backgroundColor = .clear
pagingView.listContainerView.listCellBackgroundColor = .clear
navView.addSubview(nameLabel)
nameLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.left.equalToSuperview().offset(68*width)
make.right.equalToSuperview().offset(-16*width)
}
pagingView.pinSectionHeaderVerticalOffset = Int(statusBarHeight + (50*width))
}
}
//MARK: - JXPagingViewDelegate
extension MPPositive_ArtistShowViewController: JXPagingViewDelegate{
func pagingView(_ pagingView: JXPagingView, mainTableViewDidScroll scrollView: UIScrollView) {
//
let allHeight = statusBarHeight + (50*width)
let maxHeight = headView.frame.height - allHeight
let currentOffset = scrollView.contentOffset
if currentOffset.y <= maxHeight {
//header
let value:CGFloat = currentOffset.y/maxHeight
let topValue:CGFloat = 1-value
if value >= 0.8 {
nameLabel.alpha = 1
headView.alpha = 0
}else {
nameLabel.alpha = value
headView.alpha = topValue
}
}
}
//
func tableHeaderViewHeight(in pagingView: JXPagingView) -> Int {
return Int(headView.frame.height)
}
//View
func tableHeaderView(in pagingView: JXPagingView) -> UIView {
return headView
}
//
func heightForPinSectionHeader(in pagingView: JXPagingView) -> Int {
return Int(60 * width)
}
//
func viewForPinSectionHeader(in pagingView: JXPagingView) -> UIView {
return segmentView
}
//
func numberOfLists(in pagingView: JXPagingView) -> Int {
return dataSource.titles.count
}
//View
func pagingView(_ pagingView: JXPagingView, initListAtIndex index: Int) -> JXPagingViewListViewDelegate {
let showView:MPPositive_ArtistShowTypeView = .init(frame: .init(x: 0, y: 0, width: screen_Width, height: screen_Height-headView.frame.height-(60 * width)), list: artist.lists[index])
showView.header = artist.header
showView.chooseItemBlock = {
[weak self] (item) in
guard let self = self else {return}
switch item.browseItem.itemType {
case .artist:
//
let artistVC = MPPositive_ArtistShowViewController(item.browseItem.browseId ?? "")
navigationController?.pushViewController(artistVC, animated: true)
case .list:
//
let listVC = MPPositive_ListShowViewController(item.browseItem.browseId ?? "", params: "", title: item.title ?? "", subtitle: item.subtitle ?? "")
navigationController?.pushViewController(listVC, animated: true)
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 .none:
break
}
}
return showView
}
}