197 lines
9.4 KiB
Swift
197 lines
9.4 KiB
Swift
//
|
|
// MPPositive_HomeShowTableViewCell.swift
|
|
// MusicPlayer
|
|
//
|
|
// Created by Mr.Zhou on 2024/4/22.
|
|
//
|
|
|
|
import UIKit
|
|
///b面主页Cell
|
|
class MPPositive_HomeShowTableViewCell: UITableViewCell {
|
|
//首页预览划分类型
|
|
enum HomeShowType:Int {
|
|
case Frist = 0
|
|
case Second = 1
|
|
case Third = 2
|
|
case Fourth = 3
|
|
case Fifth = 4
|
|
///对应布局layout
|
|
var layout:UICollectionViewFlowLayout {
|
|
let layout = UICollectionViewFlowLayout()
|
|
layout.sectionInset = .init(top: 15*width, left: 16*width, bottom: 0, right: 16*width)
|
|
layout.minimumLineSpacing = 8*width
|
|
switch self {
|
|
case .Frist:
|
|
layout.itemSize = .init(width: 168*width, height: 134*width)
|
|
layout.minimumInteritemSpacing = 0
|
|
layout.scrollDirection = .horizontal
|
|
case .Second:
|
|
layout.itemSize = .init(width: 96*width, height: 121*width)
|
|
layout.minimumInteritemSpacing = 0
|
|
layout.scrollDirection = .horizontal
|
|
case .Third:
|
|
layout.itemSize = .init(width: 109*width, height: 152*width)
|
|
layout.minimumInteritemSpacing = 0
|
|
layout.scrollDirection = .horizontal
|
|
case .Fourth:
|
|
layout.itemSize = .init(width: 64*width, height: 86*width)
|
|
layout.minimumInteritemSpacing = 0
|
|
layout.scrollDirection = .horizontal
|
|
case .Fifth:
|
|
layout.itemSize = .init(width: 339*width, height: 237*width)
|
|
layout.sectionInset = .init(top: 15*width, left: 16*width, bottom: 0, right: 20*width)
|
|
layout.minimumInteritemSpacing = 16
|
|
layout.scrollDirection = .vertical
|
|
}
|
|
return layout
|
|
}
|
|
}
|
|
//标题Label
|
|
private lazy var titleLabel:UILabel = createLabel("Title", font: .systemFont(ofSize: 18*width, weight: .regular), textColor: .white, textAlignment: .left)
|
|
//更多按钮
|
|
private lazy var moreBtn:UIButton = {
|
|
let btn:UIButton = .init()
|
|
btn.setBackgroundImage(UIImage(named: "Home_More'logo"), for: .normal)
|
|
btn.addTarget(self, action: #selector(moreFindClick(_ :)), for: .touchUpInside)
|
|
return btn
|
|
}()
|
|
//展示collectionView
|
|
private lazy var collectionView:UICollectionView = {
|
|
let collectionView:UICollectionView = .init(frame: .init(x: 0, y: 0, width: screen_Width, height: screen_Height), collectionViewLayout: showType.layout)
|
|
collectionView.showsVerticalScrollIndicator = false
|
|
collectionView.showsHorizontalScrollIndicator = false
|
|
collectionView.backgroundColor = .clear
|
|
collectionView.dataSource = self
|
|
collectionView.delegate = self
|
|
collectionView.register(MPPositive_HomeListFirstCollectionViewCell.self, forCellWithReuseIdentifier: MPPositive_HomeListFirstCollectionViewCellID)
|
|
collectionView.register(MPPositive_HomeListSecondCollectionViewCell.self, forCellWithReuseIdentifier: MPPositive_HomeListSecondCollectionViewCellID)
|
|
collectionView.register(MPPositive_HomeListThirdCollectionViewCell.self, forCellWithReuseIdentifier: MPPositive_HomeListThirdCollectionViewCellID)
|
|
collectionView.register(MPPositive_HomeListFourthCollectionViewCell.self, forCellWithReuseIdentifier: MPPositive_HomeListFourthCollectionViewCellID)
|
|
collectionView.register(MPPositive_HomeListFifthCollectionViewCell.self, forCellWithReuseIdentifier: MPPositive_HomeListFifthCollectionViewCellID)
|
|
return collectionView
|
|
}()
|
|
private let MPPositive_HomeListFirstCollectionViewCellID = "MPPositive_HomeListFirstCollectionViewCell"
|
|
private let MPPositive_HomeListSecondCollectionViewCellID = "MPPositive_HomeListSecondCollectionViewCell"
|
|
private let MPPositive_HomeListThirdCollectionViewCellID = "MPPositive_HomeListThirdCollectionViewCell"
|
|
private let MPPositive_HomeListFourthCollectionViewCellID = "MPPositive_HomeListFourthCollectionViewCell"
|
|
private let MPPositive_HomeListFifthCollectionViewCellID = "MPPositive_HomeListFifthCollectionViewCell"
|
|
///预览模块
|
|
var browseViewModel:MPPositive_BrowseModuleListViewModel!{
|
|
didSet{
|
|
titleLabel.text = browseViewModel.title
|
|
}
|
|
}
|
|
///列表展示类型
|
|
var showType:HomeShowType = .Frist{
|
|
didSet{
|
|
collectionView.collectionViewLayout = showType.layout
|
|
collectionView.reloadData()
|
|
}
|
|
}
|
|
///请求列表/专辑闭包
|
|
var requestNextBlock:((MPPositive_BrowseItemViewModel) -> Void)?
|
|
///查看更多闭包
|
|
var findMoreBlock:(() -> Void)?
|
|
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
|
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
|
confirgue()
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
super.init(coder: coder)
|
|
}
|
|
override func awakeFromNib() {
|
|
super.awakeFromNib()
|
|
// Initialization code
|
|
}
|
|
|
|
override func setSelected(_ selected: Bool, animated: Bool) {
|
|
super.setSelected(selected, animated: animated)
|
|
|
|
// Configure the view for the selected state
|
|
}
|
|
//配置
|
|
private func confirgue() {
|
|
selectionStyle = .none
|
|
backgroundColor = .clear
|
|
contentView.backgroundColor = .clear
|
|
//配置UI
|
|
contentView.addSubview(moreBtn)
|
|
moreBtn.snp.makeConstraints { make in
|
|
make.right.equalToSuperview().offset(-16*width)
|
|
make.top.equalToSuperview()
|
|
make.width.height.equalTo(24*width)
|
|
}
|
|
contentView.addSubview(titleLabel)
|
|
titleLabel.snp.makeConstraints { make in
|
|
make.left.equalToSuperview().offset(16*width)
|
|
make.bottom.equalTo(moreBtn.snp.bottom)
|
|
make.right.equalTo(moreBtn.snp.left).offset(-10*width)
|
|
}
|
|
contentView.addSubview(collectionView)
|
|
collectionView.snp.makeConstraints { make in
|
|
make.top.equalTo(moreBtn.snp.bottom)
|
|
make.left.right.equalToSuperview()
|
|
make.bottom.equalToSuperview().offset(-32*width).priority(999)
|
|
}
|
|
}
|
|
//查看更多
|
|
@objc private func moreFindClick(_ sender:UIButton) {
|
|
guard findMoreBlock != nil else {
|
|
return
|
|
}
|
|
findMoreBlock!()
|
|
}
|
|
//经过计算设置tableViewCell真实高度
|
|
override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize {
|
|
let size = super.systemLayoutSizeFitting(targetSize, withHorizontalFittingPriority: horizontalFittingPriority, verticalFittingPriority: verticalFittingPriority)
|
|
collectionView.layoutIfNeeded()
|
|
switch showType {
|
|
case .Fifth:
|
|
//纵向
|
|
let height = collectionView.collectionViewLayout.collectionViewContentSize.height
|
|
return CGSize(width: size.width, height: size.height + height)
|
|
default:
|
|
//横向
|
|
let height = showType.layout.itemSize.height + showType.layout.sectionInset.top + showType.layout.sectionInset.bottom
|
|
return CGSize(width: size.width, height: size.height + height)
|
|
}
|
|
}
|
|
}
|
|
//MARK: - collectionView
|
|
extension MPPositive_HomeShowTableViewCell:UICollectionViewDataSource, UICollectionViewDelegate {
|
|
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
|
return browseViewModel.items.count > 5 ? 5:browseViewModel.items.count
|
|
}
|
|
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
|
switch showType {
|
|
case .Frist:
|
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MPPositive_HomeListFirstCollectionViewCellID, for: indexPath) as! MPPositive_HomeListFirstCollectionViewCell
|
|
cell.itemViewModel = browseViewModel.items[indexPath.row]
|
|
return cell
|
|
case .Second:
|
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MPPositive_HomeListSecondCollectionViewCellID, for: indexPath) as! MPPositive_HomeListSecondCollectionViewCell
|
|
cell.itemViewModel = browseViewModel.items[indexPath.row]
|
|
return cell
|
|
case .Third:
|
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MPPositive_HomeListThirdCollectionViewCellID, for: indexPath) as! MPPositive_HomeListThirdCollectionViewCell
|
|
cell.itemViewModel = browseViewModel.items[indexPath.row]
|
|
return cell
|
|
case .Fourth:
|
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MPPositive_HomeListFourthCollectionViewCellID, for: indexPath) as! MPPositive_HomeListFourthCollectionViewCell
|
|
cell.itemViewModel = browseViewModel.items[indexPath.row]
|
|
return cell
|
|
case .Fifth:
|
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MPPositive_HomeListFifthCollectionViewCellID, for: indexPath) as! MPPositive_HomeListFifthCollectionViewCell
|
|
cell.itemViewModel = browseViewModel.items[indexPath.row]
|
|
return cell
|
|
}
|
|
}
|
|
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
|
guard requestNextBlock != nil else {
|
|
return
|
|
}
|
|
requestNextBlock!(browseViewModel.items[indexPath.row])
|
|
}
|
|
}
|