Music_Player3/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Center(个人曲库页)/MPPositive_LoveArtistsViewController.swift
2024-08-16 18:41:40 +08:00

253 lines
10 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_LoveArtistsViewController.swift
// MusicPlayer
//
// Created by Mr.Zhou on 2024/5/28.
//
import UIKit
class MPPositive_LoveArtistsViewController: MPPositive_BaseViewController, UIViewControllerTransitioningDelegate {
///广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 lazy var numbersLabel:UILabel = createLabel(font: .systemFont(ofSize: 18*width, weight: .regular), textColor: .white, textAlignment: .left)
///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_LoveArtistTableViewCell.self, forCellReuseIdentifier: MPPositive_LoveArtistTableViewCellID)
tableView.contentInset = .init(top: 0, left: 0, bottom: 70*width, right: 0)
return tableView
}()
//
private lazy var rightBtn:UIButton = {
let btn:UIButton = .init(frame: .init(x: 0, y: 0, width: 24*width, height: 24*width))
btn.setBackgroundImage(UIImage(named: "Change Sort'logo"), for: .normal)
btn.addTarget(self, action: #selector(sortTypeClick(_ :)), for: .touchUpInside)
return btn
}()
//View
private lazy var searchShowView:MPPositive_CenterListSearchView = .init(frame: .init(x: 0, y: 0, width: screen_Width, height: 30*width))
///
private lazy var searchBtn:UIButton = {
let btn = UIButton()
btn.setBackgroundImage(UIImage(named: "Center_Search'logo"), for: .normal)
btn.addTarget(self, action: #selector(searchActionShowClick(_ :)), for: .touchUpInside)
return btn
}()
private let MPPositive_LoveArtistTableViewCellID = "MPPositive_LoveArtistTableViewCell"
//
private var isSearchStyle:Bool = false
//
private var artists:[MPPositive_CollectionArtistViewModel] = []
//
private var searchArtists:[MPPositive_CollectionArtistViewModel] = []
//
private var showArtists:[MPPositive_CollectionArtistViewModel] = []
//
private var sortType:Int{
get{
if let type = UserDefaults.standard.object(forKey: "Love_Artists_SortType") as? Int {
return type
}else {
return 0
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
setTitle("Love Artists".localizableString())
setPopBtn()
configure()
MP_AdMobManager.shared.layoutLibraryNativeAd(in: adContainerView, index: 1)
MP_AdMobManager.shared.onLibraryNativeAdBlock = {
[weak adContainerView] in
guard let adContainerView = adContainerView else {return}
MP_AdMobManager.shared.layoutLibraryNativeAd(in: adContainerView, index: 1)
}
searchShowView.cancelBlock = {
[weak self] in
guard let self = self else {return}
cancelSearchAction()
}
searchShowView.textBlock = {
[weak self] (text) in
guard let self = self else {return}
isSearchStyle = true
//
reloadSearch(text)
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
reload()
}
//
private func reload() {
MPPositive_LoadCoreModel.shared.reloadCollectionArtistViewModels {
[weak self] in
guard let self = self else {return}
artists = MPPositive_LoadCoreModel.shared.artistViewModels
numbersLabel.text = "\(artists.count) \("Artists".localizableString())"
isSearchStyle ? reloadSearch(self.searchShowView.textField.text ?? ""):reloadShow()
}
}
//
private func reloadShow() {
tableView.showMessage(artists.count, title: "No Artists")
switch sortType {
case 0://
showArtists = artists.sorted(by: { item1, item2 in
if let date1 = item1.collectionArtist.addTime, let date2 = item2.collectionArtist.addTime {
return date1 > date2
}else {
return false
}
})
default://
showArtists = artists.sorted(by: { item1, item2 in
if let date1 = item1.collectionArtist.addTime, let date2 = item2.collectionArtist.addTime {
return date1 < date2
}else {
return true
}
})
}
tableView.reloadData()
}
//
private func reloadSearch(_ text:String) {
if text.isEmpty {
//
searchArtists = artists
}else {
//
searchArtists = artists.filter({($0.title ?? "").contains(text)})
}
tableView.reloadSections(.init(integer: 0), with: .automatic)
}
private func configure() {
navView.addSubview(rightBtn)
rightBtn.snp.makeConstraints { make in
make.width.height.equalTo(24*width)
make.centerY.equalToSuperview()
make.right.equalToSuperview().offset(-16*width)
}
navView.addSubview(searchBtn)
searchBtn.snp.makeConstraints { make in
make.right.equalTo(rightBtn.snp.left).offset(-10*width)
make.width.height.equalTo(24*width)
make.centerY.equalTo(rightBtn)
}
navView.addSubview(searchShowView)
searchShowView.snp.makeConstraints { make in
make.height.equalTo(40*width)
make.left.equalTo(popBtn.snp.right).offset(5*width)
make.right.equalTo(rightBtn)
make.centerY.equalTo(searchBtn)
}
searchShowView.alpha = 0
searchShowView.isHidden = true
searchShowView.isUserInteractionEnabled = false
view.addSubview(adContainerView)
adContainerView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(navView.snp.bottom)
make.height.equalTo(0)
}
view.addSubview(numbersLabel)
numbersLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(18*width)
make.top.equalTo(adContainerView.snp.bottom).offset(32*width)
}
view.addSubview(tableView)
tableView.snp.makeConstraints { make in
make.top.equalTo(numbersLabel.snp.bottom).offset(18*width)
make.left.right.bottom.equalToSuperview()
}
}
//
@objc private func sortTypeClick(_ sender:UIButton) {
view.endEditing(true)
//
cancelSearchAction()
MPPositive_ModalType = .SortType
let sortVC = MPPositive_SortTypeViewController(sortType)
sortVC.chooseBlock = {
[weak self] (type) in
guard let self = self else {return}
UserDefaults.standard.set(type, forKey: "Love_Artists_SortType")
reloadShow()
}
sortVC.transitioningDelegate = self
sortVC.modalPresentationStyle = .custom
present(sortVC, animated: true)
}
//
@objc private func searchActionShowClick(_ sender:UIButton) {
//
UIView.animate(withDuration: 0.2) {
[weak self] in
guard let self = self else {return}
searchShowView.isHidden = false
//searchView
searchShowView.alpha = 1
searchBtn.isUserInteractionEnabled = false
} completion: { [weak self] statu in
guard let self = self else {return}
searchShowView.isUserInteractionEnabled = true
}
}
//
private func cancelSearchAction() {
UIView.animate(withDuration: 0.2) {
[weak self] in
guard let self = self else {return}
searchShowView.isUserInteractionEnabled = false
searchShowView.alpha = 0
isSearchStyle = false
} completion: { [weak self] statu in
guard let self = self else {return}
searchShowView.isHidden = true
searchBtn.isUserInteractionEnabled = true
reloadShow()
}
}
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
return MPPositive_PresentationController(presentedViewController: presented, presenting: presenting)
}
}
//MARK: - tableView
extension MPPositive_LoveArtistsViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return isSearchStyle ? searchArtists.count:showArtists.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: MPPositive_LoveArtistTableViewCellID, for: indexPath) as! MPPositive_LoveArtistTableViewCell
if isSearchStyle {
cell.artistViewModel = searchArtists[indexPath.row]
}else {
cell.artistViewModel = showArtists[indexPath.row]
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let item = isSearchStyle ? searchArtists[indexPath.row]:showArtists[indexPath.row]
//
let artistVC = MPPositive_ArtistShowViewController(item.collectionArtist.artistId ?? "", clickTrackingParams: "")
navigationController?.pushViewController(artistVC, animated: true)
}
}