b面1.1.2上次播放实现

This commit is contained in:
Mr.zhou 2024-07-16 10:32:00 +08:00
parent d3d3da4f6e
commit abd0c979de
11 changed files with 96 additions and 17 deletions

View File

@ -1703,7 +1703,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1.1.1.1;
CURRENT_PROJECT_VERSION = 1.1.2.1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = T93S37G27F;
GENERATE_INFOPLIST_FILE = YES;
@ -1723,7 +1723,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.1.1;
MARKETING_VERSION = 1.1.2;
PRODUCT_BUNDLE_IDENTIFIER = relax.offline.mp3.music;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@ -1746,7 +1746,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1.1.1.1;
CURRENT_PROJECT_VERSION = 1.1.2.1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = T93S37G27F;
GENERATE_INFOPLIST_FILE = YES;
@ -1766,7 +1766,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.1.1;
MARKETING_VERSION = 1.1.2;
PRODUCT_BUNDLE_IDENTIFIER = relax.offline.mp3.music;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";

View File

@ -60,6 +60,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
switch_lunch()
//
MP_AnalyticsManager.shared.user_launchAction()
// NotificationCenter.default.addObserver(self, selector: #selector(appWillTerminateAction(_ :)), name:UIApplication.willTerminateNotification, object: nil)
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:] ) -> Bool {
@ -190,6 +191,21 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
print("返回前台")
}
}
//MARK: -
func applicationWillTerminate(_ application: UIApplication) {
print("应用关闭了")
//
guard let load = MP_PlayerManager.shared.loadPlayer, let videoId = load.currentVideoId, let songs = load.songVideos else {return}
//songs
guard let data = coreSongsforJson(songs) else {return}
//
let last:[String:Any] = ["currentVideoId":videoId,
"Songs":data]
UserDefaults.standard.set(last, forKey: "Last_Play_Songs")
}
// MARK: - Core Data stack
lazy var persistentContainer: NSPersistentContainer = {
/*

View File

@ -198,8 +198,29 @@ func jsonforCoreAdModel(_ data:Data) -> [MPPositive_AdModelModel]? {
return nil
}
}
///SongsData
func coreSongsforJson(_ array:[MPPositive_SongItemModel]) -> Data? {
guard array.isEmpty != true else {return nil}
do{
let jsonData = try JSONEncoder().encode(array)
return jsonData
}catch {
//
print("歌曲模型组转为数据失败,失败原因:\(error.localizedDescription)")
return nil
}
}
///DataSongs
func jsonforCoreSongs(_ data:Data) ->[MPPositive_SongItemModel]? {
do{
let array:[MPPositive_SongItemModel] = try JSONDecoder().decode([MPPositive_SongItemModel].self, from: data)
return array
}catch{
//
print("数据转化Songs失败失败原因:\(error.localizedDescription)")
return nil
}
}
///
typealias ActionBlock = () -> Void?
///A

View File

@ -14,7 +14,7 @@ class MP_AdMobManager: NSObject, GADFullScreenContentDelegate, GADNativeAdLoader
static let shared = MP_AdMobManager()
private let sharedInstance = GADMobileAds.sharedInstance()
///广
private var openAdStatus:Bool = true
private var openAdStatus:Bool = false
///广(50)
private let expirationTime:TimeInterval = 3000

View File

@ -68,11 +68,11 @@ class MP_NetWorkManager: NSObject {
private var playerVersion:String!
///IP
private let banIPs:[String] = [
"CN",
"HK",
"TW",
"JP",
"KR"
// "CN",
// "HK",
// "TW",
// "JP",
// "KR"
]
///访Code
private let codes:[String] = [

View File

@ -118,6 +118,12 @@ class MP_PlayerManager:NSObject{
}
//
private var currentInfo:[String:Any]?
//
private var isLast:Bool = false
//
func setLastStatus(bool:Bool) {
isLast = bool
}
//
private var playState:MP_PlayerStateType = .Null{
didSet{
@ -354,6 +360,11 @@ class MP_PlayerManager:NSObject{
if startActionBlock != nil {
startActionBlock!()
}
//
if isLast {
pause()
isLast = false
}
}
}else {
//

View File

@ -7,7 +7,7 @@
import UIKit
///
class MPPositive_SongItemModel: NSObject {
class MPPositive_SongItemModel: NSObject, Codable {
///
var index:Int!
///

View File

@ -28,6 +28,8 @@ class MPPositive_PlayerLoadViewModel: NSObject {
}
}
}
//
var currentVideoId:String?
//
private var itemObservation: NSKeyValueObservation?
// private var loadQueue:DispatchQueue!
@ -45,7 +47,7 @@ class MPPositive_PlayerLoadViewModel: NSObject {
//
self.randomVideos = self.songVideos.shuffled()
self.listViewVideos = []
self.currentVideoId = currentVideoId
}
//
private func startObservingCurrentVideoItem() {
@ -83,6 +85,8 @@ class MPPositive_PlayerLoadViewModel: NSObject {
///Video14VideoViewModel,
func improveData(_ targetVideoId:String, isRandom:Bool = false) {
//ID
self.currentVideoId = targetVideoId
//Video
var array:[MPPositive_SongItemModel] = []
if isRandom {

View File

@ -82,6 +82,17 @@ class MPPositive_HomeViewController: MPPositive_BaseViewController, UIViewContro
MPPositive_BrowseLoadViewModel.shared.reloadBrowseLists()
}
}
//home
guard let last = UserDefaults.standard.object(forKey: "Last_Play_Songs") as? [String:Any] else {return}
guard let currentVideoId = last["currentVideoId"] as? String, let data = last["Songs"] as? Data, let array = jsonforCoreSongs(data) else {return}
//使Load
let lodaViewModel = MPPositive_PlayerLoadViewModel(array, currentVideoId: currentVideoId)
lodaViewModel.improveData(currentVideoId)
//
MP_PlayerManager.shared.setPlayType(.normal)
MP_PlayerManager.shared.setLastStatus(bool: true)
MP_PlayerManager.shared.loadPlayer = lodaViewModel
}
deinit {
NotificationCenter.default.removeObserver(self)

View File

@ -68,6 +68,11 @@ class MPPositive_SearchViewController: MPPositive_BaseViewController {
[weak self] in
guard let self = self else {return}
historyCollectionView.reloadData()
historyCollectionView.layoutIfNeeded()
guard let layout = historyCollectionView.collectionViewLayout as? MPPositive_TagFlowLayout, let height = layout.layoutAttributeds.last?.frame.maxY else {return}
historyCollectionView.snp.updateConstraints { make in
make.height.equalTo(height)
}
}
grideCollectionView.reloadData()
}
@ -107,7 +112,7 @@ class MPPositive_SearchViewController: MPPositive_BaseViewController {
historyCollectionView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(deleteBtn.snp.bottom).offset(6*width)
make.height.equalTo(130*width)
make.height.equalTo(30*width)
}
view.addSubview(grideCollectionView)
grideCollectionView.snp.makeConstraints { make in
@ -159,10 +164,18 @@ class MPPositive_SearchViewController: MPPositive_BaseViewController {
MPPositive_SearchTagModel.fetchAll { [weak self] items in
guard let self = self else {return}
items.forEach({(MPPositive_SearchTagModel.delete($0))})
guard let layout = historyCollectionView.collectionViewLayout as? MPPositive_TagFlowLayout else {return}
layout.originxArray.removeAll()
layout.originyArray.removeAll()
layout.layoutAttributeds.removeAll()
MPPositive_LoadCoreModel.shared.reloadSearchTags {
[weak self] in
guard let self = self else {return}
historyCollectionView.reloadData()
historyCollectionView.layoutIfNeeded()
historyCollectionView.snp.updateConstraints { make in
make.height.equalTo(0)
}
}
}
}
@ -224,6 +237,8 @@ class MPPositive_TagFlowLayout: UICollectionViewFlowLayout {
var originxArray:[CGFloat]!
//y
var originyArray:[CGFloat]!
//
var layoutAttributeds:[UICollectionViewLayoutAttributes] = []
override init() {
super.init()
//
@ -257,6 +272,7 @@ class MPPositive_TagFlowLayout: UICollectionViewFlowLayout {
let theAttrs = layoutAttributesForItem(at: attrs.indexPath)
mutArray.append(theAttrs!)
})
layoutAttributeds = mutArray
return mutArray
}
//itemlayoutAttributes

View File

@ -125,8 +125,8 @@ class MPPositive_SearchResultPreviewShowView: UIView, JXSegmentedListContainerVi
//MARK: - tableView
extension MPPositive_SearchResultPreviewShowView:UITableViewDataSource, UITableViewDelegate, UIViewControllerTransitioningDelegate {
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
if scrollBlock != nil {
scrollBlock!()
if let block = scrollBlock {
block()
}
}
func numberOfSections(in tableView: UITableView) -> Int {