191 lines
8.3 KiB
Swift
191 lines
8.3 KiB
Swift
//
|
||
// Home_RowListsTableViewCell.swift
|
||
// MusicPlayer
|
||
//
|
||
// Created by Mr.Zhou on 2024/3/27.
|
||
//
|
||
|
||
import UIKit
|
||
//HomeTableViewcell展示类型
|
||
enum HomeRowCellLayout: Int {
|
||
case Zero = 0
|
||
case First = 1
|
||
case Second = 2
|
||
case Third = 3
|
||
//collectionView的高度
|
||
var height:CGFloat{
|
||
switch self {
|
||
case .Zero:
|
||
return 140*width
|
||
case .First:
|
||
return 163*width
|
||
case .Second:
|
||
return 163*width
|
||
case .Third:
|
||
return 215*width
|
||
}
|
||
}
|
||
//collecitonViewCell的Size
|
||
var size:CGSize{
|
||
switch self {
|
||
case .Zero:
|
||
return .init(width: 166*width, height: 140*width)
|
||
case .First:
|
||
return .init(width: 108*width, height: 118*width)
|
||
case .Second:
|
||
return .init(width: 108*width, height: 118*width)
|
||
case .Third:
|
||
return .init(width: 340*width, height: 54*width)
|
||
}
|
||
}
|
||
//collectionViewCell的外边距
|
||
var edgeInsets:UIEdgeInsets{
|
||
switch self {
|
||
case .Zero:
|
||
return .init(top: 0, left: 16*width, bottom: 0, right: 16*width)
|
||
case .First:
|
||
return .init(top: 0, left: 16*width, bottom: 45*width, right: 16*width)
|
||
case .Second:
|
||
return .init(top: 0, left: 16*width, bottom: 45*width, right: 16*width)
|
||
case .Third:
|
||
return .init(top: 0, left: 16*width, bottom: 17*width, right: 16*width)
|
||
}
|
||
}
|
||
//collectionViewCell的组距
|
||
var columnDistance:CGFloat{
|
||
return 17*width
|
||
}
|
||
//collectionViewCell的列距
|
||
var rowDistance:CGFloat{
|
||
return 8*width
|
||
}
|
||
}
|
||
class Home_RowListsTableViewCell: UITableViewCell {
|
||
@IBOutlet weak var collectionView: UICollectionView!{
|
||
didSet{
|
||
collectionView.contentInsetAdjustmentBehavior = .never
|
||
collectionView.dataSource = self
|
||
collectionView.delegate = self
|
||
collectionView.register(UINib(nibName: Home_FirstListCollectionViewCellID, bundle: nil), forCellWithReuseIdentifier: Home_FirstListCollectionViewCellID)
|
||
collectionView.register(UINib(nibName: Home_SecondListCollectionViewCellID, bundle: nil), forCellWithReuseIdentifier: Home_SecondListCollectionViewCellID)
|
||
collectionView.register(UINib(nibName: Home_FourthListCollectionViewCellID, bundle: nil), forCellWithReuseIdentifier: Home_FourthListCollectionViewCellID)
|
||
}
|
||
}
|
||
@IBOutlet weak var heightConstraint: NSLayoutConstraint!
|
||
var layout:HomeRowCellLayout = .Zero {
|
||
didSet{
|
||
heightConstraint.constant = layout.height
|
||
collectionView.reloadData()
|
||
}
|
||
}
|
||
fileprivate let Home_FirstListCollectionViewCellID = "Home_FirstListCollectionViewCell"
|
||
fileprivate let Home_SecondListCollectionViewCellID = "Home_SecondListCollectionViewCell"
|
||
fileprivate let Home_FourthListCollectionViewCellID = "Home_FourthListCollectionViewCell"
|
||
override func awakeFromNib() {
|
||
super.awakeFromNib()
|
||
selectionStyle = .none
|
||
//添加通知
|
||
NotificationCenter.notificationKey.add(observer: self, selector: #selector(switchPlayerStateAction(_ :)), notificationName: .play_music)
|
||
NotificationCenter.notificationKey.add(observer: self, selector: #selector(switchPlayerStateAction(_ :)), notificationName: .stop_music)
|
||
NotificationCenter.notificationKey.add(observer: self, selector: #selector(switchPlayerStateAction(_ :)), notificationName: .resume_music)
|
||
NotificationCenter.notificationKey.add(observer: self, selector: #selector(switchPlayerStateAction(_ :)), notificationName: .pause_music)
|
||
}
|
||
deinit{
|
||
//移除所有通知
|
||
NotificationCenter.default.removeObserver(self)
|
||
}
|
||
override func setSelected(_ selected: Bool, animated: Bool) {
|
||
super.setSelected(selected, animated: animated)
|
||
|
||
// Configure the view for the selected state
|
||
}
|
||
//当音乐播放器状态改变时
|
||
@objc private func switchPlayerStateAction(_ sender:Notification) {
|
||
//回归主线程
|
||
DispatchQueue.main.async {
|
||
[weak self] in
|
||
//刷新页面内容
|
||
self?.collectionView.reloadData()
|
||
}
|
||
}
|
||
}
|
||
//MARK: - collectionView处理
|
||
extension Home_RowListsTableViewCell:UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
|
||
func numberOfSections(in collectionView: UICollectionView) -> Int {
|
||
return layout != .Third ? 1:3
|
||
}
|
||
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
||
switch layout {
|
||
case .Zero:
|
||
return LoadDataMusic.shared.homeZeroMusics.count
|
||
case .First:
|
||
return LoadDataMusic.shared.homeFirstMusics.count
|
||
case .Second:
|
||
return LoadDataMusic.shared.homeSecondMusics.count
|
||
default:
|
||
return LoadDataMusic.shared.homeThirdMusics[section].count
|
||
}
|
||
}
|
||
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
||
switch layout {
|
||
case .Zero:
|
||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: Home_FirstListCollectionViewCellID, for: indexPath) as! Home_FirstListCollectionViewCell
|
||
cell.musicView = LoadDataMusic.shared.homeZeroMusics[indexPath.row]
|
||
return cell
|
||
case .First:
|
||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: Home_SecondListCollectionViewCellID, for: indexPath) as! Home_SecondListCollectionViewCell
|
||
cell.musicView = LoadDataMusic.shared.homeFirstMusics[indexPath.row]
|
||
return cell
|
||
case .Second:
|
||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: Home_SecondListCollectionViewCellID, for: indexPath) as! Home_SecondListCollectionViewCell
|
||
cell.musicView = LoadDataMusic.shared.homeSecondMusics[indexPath.row]
|
||
return cell
|
||
default:
|
||
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: Home_FourthListCollectionViewCellID, for: indexPath) as! Home_FourthListCollectionViewCell
|
||
cell.musicView = LoadDataMusic.shared.homeThirdMusics[indexPath.section][indexPath.row]
|
||
return cell
|
||
}
|
||
}
|
||
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
|
||
return layout.size
|
||
}
|
||
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
|
||
return layout.edgeInsets
|
||
}
|
||
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
|
||
return layout.rowDistance
|
||
}
|
||
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
|
||
return layout.columnDistance
|
||
}
|
||
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
||
var music:MusicModel!
|
||
switch layout {
|
||
case .Zero:
|
||
//获取一首音乐
|
||
music = LoadDataMusic.shared.homeZeroMusics[indexPath.row].music
|
||
case .First:
|
||
music = LoadDataMusic.shared.homeFirstMusics[indexPath.row].music
|
||
case .Second:
|
||
music = LoadDataMusic.shared.homeSecondMusics[indexPath.row].music
|
||
default:
|
||
music = LoadDataMusic.shared.homeThirdMusics[indexPath.section][indexPath.row].music
|
||
}
|
||
//检索当前音乐状态
|
||
guard MPMediaCenterManager.shared.getMusic()?.identifier != music.identifier else {
|
||
//同一首,检索是否播放中
|
||
switch MPMediaCenterManager.shared.getPlayerState() {
|
||
case .Null://没有播放
|
||
MPMediaCenterManager.shared.playerStart(music, actionType: .Normal)
|
||
case .Playing://播放中
|
||
break
|
||
case .Pause://继续播放
|
||
MPMediaCenterManager.shared.playerResume()
|
||
}
|
||
return
|
||
}
|
||
//新的一首
|
||
MPMediaCenterManager.shared.playerStart(music, actionType: .Normal)
|
||
}
|
||
}
|