Music_Player3/MusicPlayer/MP/MPPositive/Views/Search/MPPositive_SearchResultsShowView.swift
2024-05-31 17:05:17 +08:00

180 lines
6.7 KiB
Swift

//
// MPPositive_SearchResultsShowView.swift
// MusicPlayer
//
// Created by Mr.Zhou on 2024/5/13.
//
import UIKit
class MPPositive_SearchResultsShowView: UIView {
///
var loadModel:MPPositive_SearchResultsLoadViewModel!{
didSet{
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
if loadModel == nil {
emptyImageView.isHidden = false
}else {
MP_AnalyticsManager.shared.search_result_pvAction()
loadModel.resultReloadBlock = {
[weak self] in
//
guard let self = self else {return}
MP_HUD.hideNow()
isHidden = false
MP_AnalyticsManager.shared.search_resultsuccess_actionAction()
dataSource.titles = loadModel?.sectionLists.compactMap({$0.title}) ?? []
dataSource.reloadData(selectedIndex: 0)
segmentView.reloadData()
emptyImageView.isHidden = !(dataSource.titles.count == 0)
}
}
}
}
}
//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
return indicator
}()
//
fileprivate lazy var listContainerView:JXSegmentedListContainerView = {
let listContainerView = JXSegmentedListContainerView(dataSource: self)
listContainerView.backgroundColor = .clear
return listContainerView
}()
//
lazy var emptyImageView:UIImageView = {
let imageView = UIImageView(image: UIImage(named: "empty"))
imageView.contentMode = .scaleAspectFill
return imageView
}()
var scrollBlock:(() -> Void)?
//
var chooseItemBlock:((MPPositive_SearchResultItemViewModel) -> Void)?
var moreBlock:((MPPositive_SearchResultItemViewModel) -> Void)?
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .init(hex: "1A1A1A")
configure()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
//
private func configure() {
addSubview(emptyImageView)
emptyImageView.snp.makeConstraints { make in
make.center.equalToSuperview()
make.width.equalTo(211*width)
make.height.equalTo(172*width)
}
segmentView.indicators = [indicator]
segmentView.dataSource = dataSource
//View
addSubview(segmentView)
segmentView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalToSuperview()
make.height.equalTo(60*width)
}
addSubview(listContainerView)
listContainerView.snp.makeConstraints { (make) in
make.left.right.bottom.equalToSuperview().priority(999)
make.top.equalTo(segmentView.snp.bottom).priority(999)
}
segmentView.contentScrollView = listContainerView.scrollView
segmentView.listContainer = listContainerView
}
}
//MARK: - JXSegmentedTitleDataSource
extension MPPositive_SearchResultsShowView: JXSegmentedListContainerViewDataSource, JXSegmentedViewDelegate {
func numberOfLists(in listContainerView: JXSegmentedListContainerView) -> Int {
return dataSource.titles.count
}
func listContainerView(_ listContainerView: JXSegmentedListContainerView, initListAt index: Int) -> JXSegmentedListContainerViewListDelegate {
if index == 0 {
//
let showView:MPPositive_SearchResultPreviewShowView = .init(frame: listContainerView.frame, sectionLists: loadModel.sectionLists)
showView.scrollBlock = {
[weak self] in
if self?.scrollBlock != nil {
self?.scrollBlock!()
}
}
showView.chooseMoreIndexBlock = {
[weak self] (selectedIndex) in
guard let self = self else {
return
}
segmentView.selectItemAt(index: selectedIndex)
}
showView.chooseItemBlock = {
[weak self] item in
guard let self = self else {
return
}
if chooseItemBlock != nil {
chooseItemBlock!(item)
}
}
showView.moreBlock = {
[weak self] (itemView) in
guard let self = self else {return}
if moreBlock != nil {
moreBlock!(itemView)
}
}
return showView
}else {
//
let showView:MPPositive_SearchResultTypeShowView = .init(frame: listContainerView.frame, list: loadModel.sectionLists[index])
showView.scrollBlock = {
[weak self] in
if self?.scrollBlock != nil {
self?.scrollBlock!()
}
}
showView.moreBlock = {
[weak self] (itemView) in
guard let self = self else {return}
if moreBlock != nil {
moreBlock!(itemView)
}
}
return showView
}
}
}