// // MPPositive_LibraryViewController.swift // MusicPlayer // // Created by Mr.Zhou on 2024/4/19. // import UIKit import Kingfisher class MPPositive_LibraryViewController: MPPositive_BaseViewController, UIViewControllerTransitioningDelegate { ///背景图片 private lazy var backGroundImageView:UIImageView = { let imageView:UIImageView = .init(frame: .init(x: 0, y: 0, width: screen_Width, height: 812*width)) imageView.image = UIImage(named: "Center_Mask'bg") imageView.contentMode = .scaleAspectFill return imageView }() //标题Label private lazy var titleLabel:UILabel = createLabel("Library", font: .systemFont(ofSize: 32*width, weight: .regular), textColor: .white, textAlignment: .left) ///封面图片组 private lazy var coverImageViews:[UIImageView] = { var array:[UIImageView] = [] for index in 0...2{ let imageView:UIImageView = .init() imageView.contentMode = .scaleAspectFill imageView.tag = index imageView.image = placeholderImage array.append(imageView) } return array }() ///收藏单曲Label private lazy var songsLabel:UILabel = createLabel("0", font: .systemFont(ofSize: 12*width, weight: .light), textColor: .white, textAlignment: .left) ///收藏歌手Label private lazy var artistsLabel:UILabel = createLabel("0", font: .systemFont(ofSize: 12*width, weight: .light), textColor: .white, textAlignment: .left) ///下载单曲Label private lazy var loadsLabel:UILabel = createLabel("0", font: .systemFont(ofSize: 12*width, weight: .light), textColor: .white, textAlignment: .left) ///事件View组 private lazy var actionViews:UIView = showTopView() ///广告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 }() //MARK: - 分页栏设置 //分页栏View private lazy var segmentView:JXSegmentedView = { var jxSegmentView = JXSegmentedView() jxSegmentView.backgroundColor = .clear return jxSegmentView }() //数据源 private lazy var dataSource:JXSegmentedTitleDataSource = { var dataSource = JXSegmentedTitleDataSource() dataSource.titles = ["Playlists", "Collect Playlists"] //标题未选中状态 dataSource.titleNormalColor = .init(hex: "#999999") dataSource.titleNormalFont = .systemFont(ofSize: 14*width, weight: .regular) //标题选中状态 dataSource.titleSelectedColor = .white dataSource.titleSelectedFont = .systemFont(ofSize: 14*width, weight: .regular) dataSource.itemSpacing = 16*width dataSource.isItemSpacingAverageEnabled = false //是否颜色过度 dataSource.isTitleColorGradientEnabled = true dataSource.isSelectedAnimable = true dataSource.isItemTransitionEnabled = true return dataSource }() //指示器 private lazy var indicator:JXSegmentedIndicatorLineView = { let indicator = JXSegmentedIndicatorLineView() indicator.indicatorWidth = 20*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 }() override func viewDidLoad() { super.viewDidLoad() setTitle("") configure() view.backgroundColor = .init(hex: "#000000") MP_AdMobManager.shared.configureLibraryNativeAd(rootController: self) MP_AdMobManager.shared.loadLibraryNativeAd() MP_AdMobManager.shared.layoutLibraryNativeAd(in: adContainerView, index: 0) MP_AdMobManager.shared.onLibraryNativeAdBlock = { [weak adContainerView] in guard let adContainerView = adContainerView else {return} MP_AdMobManager.shared.layoutLibraryNativeAd(in: adContainerView, index: 0) } } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) reload() } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) MP_AnalyticsManager.shared.me_b_pvAction() } //刷新列表 private func reload() { MPPositive_LoadCoreModel.shared.reloadCollectionListViewModels { [weak self] in guard let self = self else {return} //封面设置 songsLabel.text = "Songs \(MPPositive_LoadCoreModel.shared.songViewModels.count)" let songCover = MPPositive_LoadCoreModel.shared.songViewModels.first?.coverURL coverImageViews[0].kf.setImage(with: songCover, placeholder: placeholderImage) artistsLabel.text = "Artists \(MPPositive_LoadCoreModel.shared.artistViewModels.count)" let artistCover = MPPositive_LoadCoreModel.shared.artistViewModels.first?.coverURL coverImageViews[1].kf.setImage(with: artistCover, placeholder: placeholderImage) loadsLabel.text = "Offline \(MPPositive_LoadCoreModel.shared.loadViewModels.count)" let loadCover = MPPositive_LoadCoreModel.shared.loadViewModels.first?.reviewURL coverImageViews[2].kf.setImage(with: loadCover, placeholder: placeholderImage) } } func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? { return MPPositive_PresentationController(presentedViewController: presented, presenting: presenting) } private func configure() { view.addSubview(backGroundImageView) navView.addSubview(titleLabel) titleLabel.snp.makeConstraints { make in make.left.equalToSuperview().offset(16*width) make.centerY.equalToSuperview() } //添加广告 view.addSubview(adContainerView) adContainerView.snp.makeConstraints { make in make.top.equalTo(navView.snp.bottom).offset(20*width) make.left.right.equalToSuperview() make.height.equalTo(0) } //添加事件块 view.addSubview(actionViews) actionViews.snp.makeConstraints { make in make.top.equalTo(adContainerView.snp.bottom).offset(24*width) make.left.right.equalToSuperview() make.height.equalTo(109*width) } //添加分页 segmentView.indicators = [indicator] segmentView.dataSource = dataSource view.addSubview(segmentView) segmentView.snp.makeConstraints { make in make.left.right.equalToSuperview() make.top.equalTo(actionViews.snp.bottom).offset(20*width) make.height.equalTo(45*width) } view.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 } //返回顶部事件View组 private func showTopView() -> UIView { let topView = UIView() topView.backgroundColor = .clear //添加事件按钮 let first = actionView(songsLabel, text: "Center_Songs'logo", tag: 0) topView.addSubview(first) first.snp.makeConstraints { make in make.centerY.equalToSuperview() make.height.width.equalTo(109*width) make.left.equalToSuperview().offset(16*width) } let second = actionView(artistsLabel, text: "Center_Artists'logo", tag: 1) topView.addSubview(second) second.snp.makeConstraints { make in make.centerY.equalToSuperview() make.height.width.equalTo(109*width) make.centerX.equalToSuperview() } let third = actionView(loadsLabel, text: "Center_Offline'logo", tag: 2) topView.addSubview(third) third.snp.makeConstraints { make in make.centerY.equalToSuperview() make.height.width.equalTo(109*width) make.right.equalToSuperview().offset(-16*width) } topView.isUserInteractionEnabled = true return topView } //生成一个事件View块 private func actionView(_ label:UILabel, text:String, tag:Int) -> UIView { let actionView = UIView() actionView.backgroundColor = .clear //设置圆角 actionView.layer.masksToBounds = true actionView.layer.cornerRadius = 8*width //添加封面图片 actionView.addSubview(coverImageViews[tag]) coverImageViews[tag].snp.makeConstraints { make in make.left.top.right.bottom.equalToSuperview() } //添加一个iconImage let iconImageView:UIImageView = .init(image: .init(named: text)) iconImageView.contentMode = .scaleAspectFill actionView.addSubview(iconImageView) iconImageView.snp.makeConstraints { make in make.width.height.equalTo(20*width) make.left.equalToSuperview().offset(8*width) make.bottom.equalToSuperview().offset(-8*width) } //添加一个标题 actionView.addSubview(label) label.snp.makeConstraints { make in make.centerY.equalTo(iconImageView) make.left.equalTo(iconImageView.snp.right).offset(4*width) make.right.equalToSuperview().offset(-8*width) } actionView.tag = tag actionView.isUserInteractionEnabled = true actionView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(actionClick(_:)))) return actionView } //事件点击方法 @objc private func actionClick(_ sender:UITapGestureRecognizer) { let tag = sender.view?.tag switch tag { case 0: let loveSongsVC = MPPositive_LoveSongsViewController() navigationController?.pushViewController(loveSongsVC, animated: true) case 1: let loveArtistsVC = MPPositive_LoveArtistsViewController() navigationController?.pushViewController(loveArtistsVC, animated: true) default: let offlineVC = MPPositive_OfflineSongsViewController() navigationController?.pushViewController(offlineVC, animated: true) } MP_AdMobManager.shared.showLibraryInterstitialAdIfAvailable(completion: nil) } } //MARK: - JXSegmentedTitleDataSource extension MPPositive_LibraryViewController:JXSegmentedListContainerViewDataSource, JXSegmentedViewDelegate{ func numberOfLists(in listContainerView: JXSegmentedListContainerView) -> Int { return dataSource.titles.count } func listContainerView(_ listContainerView: JXSegmentedListContainerView, initListAt index: Int) -> JXSegmentedListContainerViewListDelegate { switch index { case 0://自定义歌单 let showView:MPPositive_PlayListsShowTypeView = .init(frame: listContainerView.frame) showView.addBlock = { [weak self] in guard let self = self else {return} //弹出新增自定义框 MPPositive_ModalType = .NewList let listVC = MPSideA_RenameViewController() listVC.titleText = "Name Your PlayList" listVC.renameBlock = { [weak self] text in //新建一个自定歌单列表 let list = MPPositive_CustomPlayListModel.create() list.playListId = Date().timeZone().toString(.custom("YYYY/MM/dd/HH:mm:ss")) list.title = text list.createTime = Date().timeZone() list.addToRelationshipToCustomVideos([]) MPPositive_CustomPlayListModel.save() //成功新建歌单列表 print("成功新建\(text)歌单") //发布通知 NotificationCenter.notificationKey.post(notificationName: .create_custom_playlist) } listVC.transitioningDelegate = self listVC.modalPresentationStyle = .custom present(listVC, animated: true) } showView.chooseBlock = { [weak self] item in guard let self = self else {return} //展示歌单详情 let playListVC = MPPositive_CustomPlayListViewController(item.playList) navigationController?.pushViewController(playListVC, animated: true) MP_AdMobManager.shared.showLibraryInterstitialAdIfAvailable(completion: nil) } return showView default://收藏歌单 let showView:MPPositive_CollectionListsShowTypeView = .init(frame: listContainerView.frame) showView.chooseBlock = { [weak self] item in guard let self = self else {return} let listVC = MPPositive_ListShowViewController(item.collectionList.browseId ?? "", params: item.collectionList.params ?? "", title: item.collectionList.title ?? "", subtitle: item.collectionList.subtitle ?? "") navigationController?.pushViewController(listVC, animated: true) } return showView } } }