Music_Player3/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Base(基类,导航栏,标签栏)/MPPositive_BaseViewController.swift
2024-08-15 15:50:48 +08:00

183 lines
7.0 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_BaseViewController.swift
// MusicPlayer
//
// Created by Mr.Zhou on 2024/4/18.
//
import UIKit
///b
class MPPositive_BaseViewController: MP_BaseViewController, UIGestureRecognizerDelegate {
//
private lazy var navTitleLabel:UILabel = createLabel(font: .systemFont(ofSize: 20*width, weight: .regular), textColor: .white, textAlignment: .center)
//pop
private lazy var popBtn:UIButton = {
let btn = UIButton()
btn.setBackgroundImage(UIImage(named: "Poplogo"), for: .normal)
btn.addTarget(self, action: #selector(popActionClick(_ :)), for: .touchUpInside)
return btn
}()
//View
private lazy var errorView:UIView = createErrorView()
///
var errorBlock:(() -> Void)?
///
var retryBlock:(() -> Void)?
//View
lazy var navView:UIView = setTitleView()
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.interactivePopGestureRecognizer?.delegate = self
view.addSubview(navView)
}
deinit {
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
NotificationCenter.notificationKey.add(observer: self, selector: #selector(errorAction(_ :)), notificationName: .netWork_error_deal)
NotificationCenter.notificationKey.add(observer: self, selector: #selector(switchCurrentVideoAction(_ :)), notificationName: .positive_player_reload)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
NotificationCenter.default.removeObserver(self)
}
//titleView
private func setTitleView() -> UIView {
let topView = UIView(frame: .init(x: 0, y: statusBarHeight, width: screen_Width, height: 50*width))
topView.backgroundColor = .clear
topView.addSubview(navTitleLabel)
navTitleLabel.snp.makeConstraints { make in
make.center.equalToSuperview()
}
return topView
}
///title
func setTitle(_ text:String) {
navTitleLabel.text = text
}
///popBtn
func setPopBtn() {
navView.addSubview(popBtn)
popBtn.snp.makeConstraints { make in
make.width.height.equalTo(42*width)
make.centerY.equalToSuperview()
make.left.equalTo(16*width)
}
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
//,navView
view.bringSubviewToFront(navView)
}
//pop
@objc func popActionClick(_ sender:UIButton) {
MPPositive_Debouncer.shared.call(0.1) {
[weak self] in
guard let self = self else {return}
navigationController?.popViewController(animated: true)
}
}
//errorView
private func createErrorView() -> UIView{
let errorView = UIView()
errorView.layer.masksToBounds = true
errorView.layer.borderColor = UIColor(hex: "#80F988").cgColor
errorView.layer.borderWidth = 1*width
errorView.layer.cornerRadius = 18*width
errorView.backgroundColor = .clear
//使
//
let iconImageView = UIImageView(image: .init(named: "empty"))
errorView.addSubview(iconImageView)
iconImageView.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.centerY.equalToSuperview().multipliedBy(0.65)
make.width.equalTo(211*width)
make.height.equalTo(172*width)
}
let label = createLabel("Weak connection. Please check your network", font: .systemFont(ofSize: 13*width, weight: .regular), textColor: .white, textAlignment: .center)
errorView.addSubview(label)
label.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.top.equalTo(iconImageView.snp.bottom).offset(8*width)
}
let retryBtn:UIButton = .init()
retryBtn.setTitle("Retry", for: .normal)
retryBtn.setTitleColor(.white, for: .normal)
retryBtn.titleLabel?.font = .systemFont(ofSize: 15*width, weight: .medium)
retryBtn.backgroundColor = .init(hex: "#80F988")
retryBtn.layer.masksToBounds = true
retryBtn.layer.cornerRadius = 16*width
retryBtn.addTarget(self, action: #selector(retryClick(_ :)), for: .touchUpInside)
errorView.addSubview(retryBtn)
retryBtn.snp.makeConstraints { make in
make.width.equalTo(180*width)
make.height.equalTo(45*width)
make.centerX.equalToSuperview()
make.bottom.equalToSuperview().offset(-15*width)
}
return errorView
}
//View
func setErrorView() {
view.addSubview(errorView)
errorView.snp.makeConstraints { make in
make.center.equalToSuperview()
make.width.equalTo(300*width)
make.height.equalTo(280*width)
}
}
//View
func removeErrorView() {
if errorView.superview != nil {
errorView.removeFromSuperview()
}
}
//
@objc private func errorAction(_ sender:Notification){
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
MP_HUD.text("Bad connection~".localizableString(), delay: 1.0){ [weak self] in
//
if self?.errorBlock != nil {
self?.errorBlock!()
}
}
}
}
@objc private func retryClick(_ sender:UIButton) {
if retryBlock != nil {
retryBlock!()
}
}
//MARK- UIGestureRecognizerDelegate
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if gestureRecognizer === self.navigationController?.interactivePopGestureRecognizer {
// UINavigationController
//
return self.navigationController?.viewControllers.count ?? 0 > 1
}
return true
}
///
@objc private func switchCurrentVideoAction(_ notification:Notification) {
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
//ViewtableView
view.subviews.forEach { item in
if item is UITableView {
let tableView = item as? UITableView
tableView?.reloadData()
}else if item is UICollectionView {
let collectionView = item as? UICollectionView
collectionView?.reloadData()
}
}
}
}
}