Music_Player3/relax.offline.mp3.music/MP/MPPositive/ViewControllers/Player(播放器)/MPPositive_PlayerViewController.swift
2024-07-25 19:44:30 +08:00

725 lines
30 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_PlayerViewController.swift
// MusicPlayer
//
// Created by Mr.Zhou on 2024/4/29.
//
import UIKit
import Kingfisher
///b
class MPPositive_PlayerViewController: MPPositive_BaseViewController, UIViewControllerTransitioningDelegate {
//
enum PlayerShowType:Int {
///
case showCover = 0
///
case showLyric = 1
}
//View
private var topShowType:PlayerShowType = .showCover{
didSet{
setSwitchAnimation(topShowType)
}
}
//MARK: - View
//
private lazy var leftPopBtn:UIButton = {
let btn = UIButton()
btn.backgroundColor = .init(hex: "#FFFFFF", alpha: 0.15)
//
btn.layer.borderColor = UIColor(hex: "#FFFFFF", alpha: 0.3).cgColor
btn.layer.borderWidth = 1*width
btn.layer.cornerRadius = 21*width
btn.layer.masksToBounds = true
//
btn.setImage(UIImage(named: "Player_Pop'logo"), for: .normal)
btn.addTarget(self, action: #selector(disMissClick(_ :)), for: .touchUpInside)
return btn
}()
//View(SONG|LYRICS)
private lazy var switchActionView:UIView = createSwitchActionView()
//SONG()
private lazy var songBtn:UIButton = createStatueBtn("SONG", color: .init(hex: "#FFFFFF", alpha: 0.85), tag: 0)
//LYRICS
private lazy var lyricsBtn:UIButton = createStatueBtn("LYRICS", color: .init(hex: "#FFFFFF", alpha: 0.45), tag: 1)
//
private lazy var relatedBtn:UIButton = {
let btn = UIButton()
btn.setBackgroundImage(UIImage(named: "Player_Related'logo"), for: .normal)
btn.addTarget(self, action: #selector(relatedContentClick(_ :)), for: .touchUpInside)
return btn
}()
//MARK: -
//
private lazy var backImageView:UIImageView = {
let imageView:UIImageView = .init()
imageView.image = placeholderImage
imageView.contentMode = .scaleAspectFill
return imageView
}()
//
private lazy var backBlurView:UIVisualEffectView = {
//
let blurEffect = UIBlurEffect(style: .dark)
//
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.alpha = 1
blurEffectView.isUserInteractionEnabled = false
blurEffectView.contentView.addSubview(blurContentView)
blurContentView.snp.makeConstraints { make in
make.left.top.right.bottom.equalToSuperview()
}
return blurEffectView
}()
//View
private lazy var blurContentView:UIView = {
let contentView = UIView()
contentView.backgroundColor = .clear
return contentView
}()
///View
private lazy var maskNotReachableView:UIView = {
let maskView = UIView(frame: .init(x: 0, y: 0, width: 300*width, height: 35*width))
maskView.backgroundColor = .init(hex: "#000000", alpha: 0.6)
maskView.layer.masksToBounds = true
maskView.layer.cornerRadius = 21*width
//label
let noticeLabel:UILabel = createLabel("Bad connection~", font: .systemFont(ofSize: 13*width, weight: .regular), textColor: .white, textAlignment: .center, lines: 0)
maskView.addSubview(noticeLabel)
noticeLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.centerX.equalToSuperview().multipliedBy(1.2)
}
//icon
let iconImageView:UIImageView = .init(image: .init(named: "Player_NoNet'log"))
maskView.addSubview(iconImageView)
iconImageView.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.right.equalTo(noticeLabel.snp.left).offset(-10*width)
make.width.equalTo(24*width)
make.height.equalTo(24*width)
}
return maskView
}()
//MARK: -
//
private lazy var playBtn:UIButton = {
let btn:UIButton = .init()
btn.setBackgroundImage(UIImage(named: "Player_Pause'logo"), for: .normal)
btn.setBackgroundImage(UIImage(named: "Player_Player'logo"), for: .selected)
btn.addTarget(self, action: #selector(playClick(_ :)), for: .touchUpInside)
//
btn.isUserInteractionEnabled = true
return btn
}()
//
private lazy var listBtn:UIButton = {
let btn:UIButton = .init()
btn.setBackgroundImage(UIImage(named: "Player_List'logo"), for: .normal)
btn.addTarget(self, action: #selector(listClick(_ :)), for: .touchUpInside)
return btn
}()
//
private lazy var typeBtn:UIButton = {
let btn = UIButton()
btn.setBackgroundImage(UIImage(named: "Player_Normal'logo"), for: .normal)
btn.addTarget(self, action: #selector(typeClick(_ :)), for: .touchUpInside)
return btn
}()
//
private lazy var nextBtn:UIButton = {
let btn = UIButton()
btn.setBackgroundImage(UIImage(named: "Player_Next'logo"), for: .normal)
btn.addTarget(self, action: #selector(nextClick(_ :)), for: .touchUpInside)
return btn
}()
//
private lazy var perviousBtn:UIButton = {
let btn = UIButton()
btn.setBackgroundImage(UIImage(named: "Player_Pervious'logo"), for: .normal)
btn.addTarget(self, action: #selector(previousClick(_ :)), for: .touchUpInside)
return btn
}()
//
private lazy var activityIndicator:UIActivityIndicatorView = {
let activityIndicator:UIActivityIndicatorView = .init(frame: .init(x: 0, y: 0, width: 66*width, height: 66*width))
activityIndicator.style = .gray
activityIndicator.backgroundColor = .white
activityIndicator.layer.masksToBounds = true
activityIndicator.layer.cornerRadius = 33*width
activityIndicator.color = .black
return activityIndicator
}()
//View(View)
private lazy var coverView:MPPositive_PlayerCoverView = .init(frame: .init(x: 0, y: 0, width: screen_Width, height: 480*width))
//View
private lazy var lyricsView:MPPositive_PlayerLyricView = .init(frame: .init(x: 0, y: 0, width: screen_Width, height: 480*width))
var recommendBlock:(() -> Void)?
var searchBlock:((String) -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
//label
setTitle("")
configure()
//
MP_PlayerManager.shared.runActionBlock = { [weak self] (currentTime, duration) in
guard let self = self else { return }
DispatchQueue.main.async {
//
self.coverView.durationLabel.text = setTimesToMinSeconds(currentTime)
//
let remain:TimeInterval = duration - currentTime
self.coverView.maxTimesLabel.text = setTimesToMinSeconds(remain)
//
let value = currentTime/duration
self.coverView.sliderView.value = Float(value)
}
}
//
MP_PlayerManager.shared.cacheValueBlock = { [weak self] (value, duration) in
guard let self = self else { return }
DispatchQueue.main.async {
if value < duration {
//
let float = value/duration
self.coverView.progressView.setProgress(Float(float), animated: false)
}else {
//
self.coverView.progressView.setProgress(1, animated: false)
}
}
}
switchPlayBtnStatu(MP_PlayerManager.shared.getPlayState())
coverView.cancelBlock = {
[weak self] in
guard let self = self else {return}
//
let alertController = UIAlertController(title: "Cancel Song Download Task", message: "Are you sure you want to cancel the download task of this song?", preferredStyle: .alert)
let cancel = UIAlertAction(title: "Cancel", style: .cancel)
alertController.addAction(cancel)
let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in
guard let videoId = MP_PlayerManager.shared.loadPlayer?.currentVideo?.song?.videoId else {return}
//
MP_DownloadManager.shared.cancelDownloadTask(videoId) { videoId in
MP_HUD.text("Canceled", delay: 1.0, completion: nil)
self.uploadUI()
MP_PlayerManager.shared.loadPlayer?.currentVideo?.reloadCollectionAndDownLoad()
}
}
alertController.addAction(sure)
present(alertController, animated: true)
}
coverView.deleteBlock = {
[weak self] in
guard let self = self else {return}
//
let alertController = UIAlertController(title: "Delete This Song", message: "Are you sure you want to delete the offline resources of this song?", preferredStyle: .alert)
let cancel = UIAlertAction(title: "Cancel", style: .cancel)
alertController.addAction(cancel)
let sure = UIAlertAction(title: "Sure", style: .destructive) {(action) in
guard let videoId = MP_PlayerManager.shared.loadPlayer?.currentVideo?.song?.videoId else {return}
//
MP_DownloadManager.shared.deleteFileDocuments(videoId) { videoId in
MP_HUD.progress("Loading...", delay: 0.5) {
MP_HUD.text("Removed", delay: 1.0, completion: nil)
self.uploadUI()
MP_PlayerManager.shared.loadPlayer?.currentVideo?.reloadCollectionAndDownLoad()
}
}
}
alertController.addAction(sure)
present(alertController, animated: true)
}
coverView.searchBlock = {
[weak self] (text) in
guard let self = self else {return}
dismiss(animated: true) {
if let block = self.searchBlock {
block(text)
}
}
}
}
deinit {
NotificationCenter.default.removeObserver(self)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
//
NotificationCenter.notificationKey.add(observer: self, selector: #selector(playerReloadAction(_ :)), notificationName: .positive_player_reload)
NotificationCenter.notificationKey.add(observer: self, selector: #selector(statusSwitchAction(_:)), notificationName: .switch_player_status)
NotificationCenter.notificationKey.add(observer: self, selector: #selector(playerTypeSwitchAction(_:)), notificationName: .player_type_switch)
NotificationCenter.notificationKey.add(observer: self, selector: #selector(deleteListAction(_:)), notificationName: .player_delete_list)
//
NotificationCenter.notificationKey.add(observer: self, selector: #selector(netWorkNotReachableAction(_:)), notificationName: .net_switch_notReachable)
NotificationCenter.notificationKey.add(observer: self, selector: #selector(netWorkReachableAction(_:)), notificationName: .net_switch_reachable)
// switchPlayBtnStatu(MP_PlayerManager.shared.getPlayState())
//
if MP_PlayerManager.shared.loadPlayer?.currentVideo != nil {
uploadUI()
}
if MP_PlayerManager.shared.videoLayer.player != MP_PlayerManager.shared.player {
MP_PlayerManager.shared.videoLayer.player = MP_PlayerManager.shared.player
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
NotificationCenter.default.removeObserver(self)
MP_PlayerManager.shared.videoLayer.player = nil
// print("Layer")
// MP_PlayerManager.shared.videoLayer.removeFromSuperlayer()
}
//
private func configure() {
//View
navView.addSubview(leftPopBtn)
leftPopBtn.snp.makeConstraints { make in
make.width.height.equalTo(42*width)
make.left.equalToSuperview().offset(16*width)
make.centerY.equalToSuperview()
}
navView.addSubview(relatedBtn)
relatedBtn.snp.makeConstraints { make in
make.width.height.equalTo(24*width)
make.right.equalToSuperview().offset(-16*width)
make.centerY.equalToSuperview()
}
navView.addSubview(switchActionView)
switchActionView.snp.makeConstraints { make in
make.height.equalToSuperview()
make.width.equalToSuperview().multipliedBy(0.45)
make.center.equalToSuperview()
}
//
view.addSubview(backImageView)
backImageView.snp.makeConstraints { make in
make.left.right.top.bottom.equalToSuperview()
}
view.addSubview(backBlurView)
backBlurView.snp.makeConstraints { make in
make.left.right.top.bottom.equalToSuperview()
}
let bottomImageView:UIImageView = .init(image: .init(named: "Player_Bottom'mask"))
bottomImageView.contentMode = .scaleAspectFill
bottomImageView.isUserInteractionEnabled = false
view.addSubview(bottomImageView)
bottomImageView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.height.equalTo(286*width)
}
//
let bottomView = createBottomView()
view.addSubview(bottomView)
bottomView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.height.equalTo(200*width)
}
//
view.addSubview(lyricsView)
lyricsView.snp.makeConstraints { make in
make.top.equalTo(navView.snp.bottom)
make.left.right.equalToSuperview()
make.height.equalTo(480*width)
}
lyricsView.isHidden = true
view.addSubview(coverView)
coverView.snp.makeConstraints { make in
make.top.equalTo(navView.snp.bottom)
make.left.right.equalToSuperview()
make.height.equalTo(480*width)
}
coverView.isHidden = false
if MP_PlayerManager.shared.videoLayer.superlayer == nil {
print("将视频Layer添加")
coverView.videoView.layer.addSublayer(MP_PlayerManager.shared.videoLayer)
MP_PlayerManager.shared.videoLayer.frame = .init(x: 0, y: 0, width: screen_Width, height: 360*width )
}
view.addSubview(maskNotReachableView)
maskNotReachableView.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.top.equalTo(navView.snp.bottom)
make.width.equalTo(176*width)
make.height.equalTo(42*width)
}
maskNotReachableView.isHidden = (MP_NetWorkManager.shared.netWorkStatu == .reachable)
}
//View
private func createSwitchActionView() -> UIView {
let actionView:UIView = UIView()
actionView.backgroundColor = .clear
actionView.addSubview(songBtn)
songBtn.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.centerX.equalToSuperview().multipliedBy(0.5)
}
actionView.addSubview(lyricsBtn)
lyricsBtn.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.centerX.equalToSuperview().multipliedBy(1.5)
}
//线View
let lineView:UIView = .init()
lineView.backgroundColor = .init(hex: "#FFFFFF", alpha: 0.45)
actionView.addSubview(lineView)
lineView.snp.makeConstraints { make in
make.center.equalToSuperview()
make.width.equalTo(1*width)
make.height.equalTo(14*width)
}
//
return actionView
}
//
private func createStatueBtn(_ text:String = "text", color:UIColor, tag:Int) -> UIButton {
let btn = UIButton()
btn.setTitle(text, for: .normal)
btn.setTitleColor(color, for: .normal)
btn.titleLabel?.font = .systemFont(ofSize: 15, weight: .regular)
btn.tag = tag
btn.addTarget(self, action: #selector(switchActionClick(_ :)), for: .touchUpInside)
return btn
}
//View
private func createBottomView() -> UIView {
let bottomView:UIView = .init()
bottomView.backgroundColor = .clear
bottomView.addSubview(playBtn)
playBtn.snp.makeConstraints { make in
make.width.height.equalTo(66*width)
make.centerX.equalToSuperview()
make.centerY.equalToSuperview().multipliedBy(1.1)
}
bottomView.addSubview(activityIndicator)
activityIndicator.snp.makeConstraints { make in
make.center.equalTo(playBtn)
make.width.height.equalTo(playBtn)
}
let state = MP_PlayerManager.shared.getPlayState()
switch state {
case .Null:
activityIndicator.isHidden = false
activityIndicator.startAnimating()
default:
activityIndicator.isHidden = false
activityIndicator.stopAnimating()
}
bottomView.addSubview(listBtn)
listBtn.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-20*width)
make.centerY.equalTo(playBtn)
make.width.height.equalTo(24*width)
}
bottomView.addSubview(typeBtn)
typeBtn.snp.makeConstraints { make in
make.left.equalToSuperview().offset(20*width)
make.centerY.equalTo(playBtn)
make.width.height.equalTo(24*width)
}
bottomView.addSubview(nextBtn)
nextBtn.snp.makeConstraints { make in
make.width.height.equalTo(30*width)
make.centerY.equalTo(playBtn.snp.centerY)
make.right.equalToSuperview().offset(-98*width)
}
bottomView.addSubview(perviousBtn)
perviousBtn.snp.makeConstraints { make in
make.width.height.equalTo(30*width)
make.centerY.equalTo(playBtn.snp.centerY)
make.left.equalToSuperview().offset(98*width)
}
return bottomView
}
//MARK: -
private func uploadUI() {
DispatchQueue.main.async {
[weak self] in
guard let self = self, let currentVideo = MP_PlayerManager.shared.loadPlayer?.currentVideo else {return}
print("\(currentVideo.title ?? "")刷新了页面")
//
backImageView.kf.setImage(with: currentVideo.coverUrl, placeholder: placeholderImage)
coverView.coverImageView.kf.setImage(with: currentVideo.coverUrl, placeholder: placeholderImage)
coverView.titleLabel.text = currentVideo.title
coverView.subtitleLabel.text = currentVideo.subtitle
lyricsView.titleLabel.text = currentVideo.title
lyricsView.subtitleLabel.text = currentVideo.subtitle
lyricsView.lyricsLabel.text = (currentVideo.lyrics ?? "").isEmpty == true ? "No Lyrics":currentVideo.lyrics
MPPositive_DownloadItemModel.fetch(predicate: .init(format: "videoId == %@", currentVideo.song.videoId ?? "")) { [weak self] results in
self?.coverView.downloadButton.state = results.count != 0 ? .downloaded:.startDownload
}
coverView.collectionSongBtn.isSelected = currentVideo.isCollection ?? false
coverView.setProgress(currentVideo.song?.videoId ?? "")
switchPlayTypeBtnIcon(typeBtn)
if let item = currentVideo.resourcePlayerItem {
MP_PlayerManager.shared.isCoverVideo(playerItem: item) { [weak self] bool in
DispatchQueue.main.async {
self?.blurContentView.backgroundColor = bool ? .clear:.black
self?.coverView.coverImageView.isHidden = !bool
self?.coverView.videoView.isHidden = bool
}
}
}
// activityIndicator.isHidden = true
// activityIndicator.stopAnimating()
}
}
//
@objc private func netWorkNotReachableAction(_ sender:Notification) {
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
maskNotReachableView.isHidden = false
}
}
//
@objc private func netWorkReachableAction(_ sender:Notification) {
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
maskNotReachableView.isHidden = true
}
}
//MARK: -
//
@objc private func playerReloadAction(_ sender:Notification) {
//
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
uploadUI()
//
coverView.sliderView.value = 0
//
coverView.durationLabel.text = setTimesToMinSeconds(0)
//
coverView.maxTimesLabel.text = setTimesToMinSeconds(0)
//
MP_PlayerManager.shared.play { [weak self] in
guard let self = self else { return }
//playBtn
playBtn.isUserInteractionEnabled = true
}
}
}
//
@objc private func statusSwitchAction(_ sender:Notification) {
guard let object = sender.object else {return}
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
let state:MP_PlayerStateType = sender.object as! MP_PlayerStateType
DispatchQueue.main.async {
[weak self] in
self?.switchPlayBtnStatu(state)
}
}
}
private func switchPlayBtnStatu(_ state:MP_PlayerStateType) {
switch state {
case .Playing:
playBtn.isSelected = true
activityIndicator.isHidden = true
activityIndicator.stopAnimating()
case .Pause:
playBtn.isSelected = false
activityIndicator.isHidden = true
activityIndicator.stopAnimating()
default:
playBtn.isSelected = false
activityIndicator.isHidden = false
activityIndicator.startAnimating()
}
}
//
@objc private func playerTypeSwitchAction(_ sender:Notification) {
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
switchPlayTypeBtnIcon(typeBtn)
}
}
//
@objc private func deleteListAction(_ sender:Notification) {
DispatchQueue.main.async {
[weak self] in
guard let self = self else {return}
dismiss(animated: true)
}
}
//MARK: -
//dismiss
@objc private func disMissClick(_ sender:UIButton) {
dismiss(animated: true)
}
//|
@objc private func switchActionClick(_ sender:UIButton) {
guard MP_NetWorkManager.shared.netWorkStatu == .reachable else {
MP_HUD.text("Weak connection.", delay: 2.0, completion: nil)
return
}
topShowType = .init(rawValue: sender.tag)!
}
//
private func setSwitchAnimation(_ sender: PlayerShowType) {
//segmentedView
switchActionView.isUserInteractionEnabled = false
switch sender {
case .showCover://
UIView.animate(withDuration: 0.4) {
[weak self] in
guard let self = self else {return}
//
coverView.alpha = 1.0
coverView.isHidden = false
//lyricView
lyricsView.alpha = 0.1
songBtn.setTitleColor(.init(hex: "#FFFFFF", alpha: 0.85), for: .normal)
lyricsBtn.setTitleColor(.init(hex: "#FFFFFF", alpha: 0.45), for: .normal)
} completion: { [weak self] (_) in
guard let self = self else {return}
//lyricListView
lyricsView.isHidden = true
//
switchActionView.isUserInteractionEnabled = true
}
case .showLyric://
UIView.animate(withDuration: 0.4) {
[weak self] in
guard let self = self else {return}
//
lyricsView.alpha = 1.0
lyricsView.isHidden = false
//coverView
coverView.alpha = 0.1
songBtn.setTitleColor(.init(hex: "#FFFFFF", alpha: 0.45), for: .normal)
lyricsBtn.setTitleColor(.init(hex: "#FFFFFF", alpha: 0.85), for: .normal)
} completion: { [weak self] (_) in
guard let self = self else {return}
//coverView
coverView.isHidden = true
//
switchActionView.isUserInteractionEnabled = true
}
}
}
//
@objc private func relatedContentClick(_ sender:UIButton) {
guard MP_NetWorkManager.shared.netWorkStatu == .reachable else {
MP_HUD.text("Weak connection.", delay: 2.0, completion: nil)
return
}
guard MP_PlayerManager.shared.loadPlayer?.currentVideo?.song.relatedID != nil else {return}
//dismiss
if recommendBlock != nil {
recommendBlock!()
}
dismiss(animated: true)
}
////
@objc private func playClick(_ sender:UIButton) {
guard let _ = MP_PlayerManager.shared.loadPlayer else {
return
}
//
switch MP_PlayerManager.shared.getPlayState() {
case .Null:
//
MP_PlayerManager.shared.play { [weak self] in
guard let self = self else { return }
//
coverView.sliderView.value = 0
}
case .Playing:
//
MP_PlayerManager.shared.pause {
[weak self] in
}
case .Pause:
//
MP_PlayerManager.shared.resume {
[weak self] in
}
}
}
//
@objc private func listClick(_ sender:UIButton) {
guard let _ = MP_PlayerManager.shared.loadPlayer else {return}
MPPositive_Debouncer.shared.call {
[weak self] in
guard let self = self else {return}
MPPositive_ModalType = .PlayerList
let listVC = MPPositive_PlayerListShowViewController()
listVC.searchBlock = {
[weak self] (text) in
self?.dismiss(animated: true) {
if let block = self?.searchBlock {
block(text)
}
}
}
listVC.transitioningDelegate = self
listVC.modalPresentationStyle = .custom
present(listVC, animated: true)
}
}
func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? {
return MPPositive_PresentationController(presentedViewController: presented, presenting: presenting)
}
////
@objc private func typeClick(_ sender:UIButton) {
MPPositive_Debouncer.shared.call {
[weak self] in
guard let self = self else {return}
//
var value = MP_PlayerManager.shared.getPlayType().rawValue
value += 1
if value > 2 {
value = 0
}
MP_PlayerManager.shared.setPlayType(.init(rawValue: value)!)
}
}
//
@objc private func nextClick(_ sender:UIButton) {
guard let _ = MP_PlayerManager.shared.loadPlayer?.currentVideo else {
return
}
//广
if MP_NetWorkManager.shared.netWorkStatu == .reachable {
MP_AdMobManager.shared.showSwitchInterstitialAdIfAvailable(completion: nil)
}
MPPositive_Debouncer.shared.call {
[weak self] in
guard let self = self else {return}
coverView.sliderView.value = 0
MP_PlayerManager.shared.nextEvent()
}
}
//
@objc private func previousClick(_ sender:UIButton) {
guard let _ = MP_PlayerManager.shared.loadPlayer?.currentVideo else {
return
}
//广
if MP_NetWorkManager.shared.netWorkStatu == .reachable {
MP_AdMobManager.shared.showSwitchInterstitialAdIfAvailable(completion: nil)
}
MPPositive_Debouncer.shared.call {
[weak self] in
guard let self = self else {return}
coverView.sliderView.value = 0
MP_PlayerManager.shared.previousEvent()
}
}
}