Bladeren bron

修改以下问题:
点设置铃声的时候页面会往上滑一下
mine删除音乐 音乐还在播放
铃声主题详情点了静音后上下滑动,图标一直是静音
主题页面播放中退到桌面,声音还在继续

100Years 1 maand geleden
bovenliggende
commit
20423a14b8

+ 2 - 2
AIRingtone.xcodeproj/project.pbxproj

@@ -1271,7 +1271,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 4;
+				CURRENT_PROJECT_VERSION = 5;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = AIRingtone/Info.plist;
@@ -1313,7 +1313,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CLANG_ENABLE_MODULES = YES;
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 4;
+				CURRENT_PROJECT_VERSION = 5;
 				DEVELOPMENT_TEAM = 65UD255J84;
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = AIRingtone/Info.plist;

+ 36 - 36
AIRingtone/Business/TSAIPhotoVC/TSGeneralPicVC/TSGenneralPicVM.swift

@@ -48,50 +48,50 @@ class TSGenneralPicVM {
     var gennerateType:TSGennerateType = .poster
     var generatingProgress = 0
     
-    //模拟数据
-    func creatImageEmoji(text:String) {
-        stateDatauPblished = (.start,nil)
-        stateDatauPblished = (.progressString(generating(progress: 0.0)),nil)
-
-        kDelayOnMainThread(0.2) {
-            self.stateDatauPblished = (.progressString(self.generating(progress: 0.5)),nil)
-        }
-
-        kDelayOnMainThread(1.0) {
-            if Bool.random() {
-                let infoModel = TSActionInfoModel(JSON: self.gennerateType == .poster ? actionInfoDictPoster : actionInfoDictPhoto)
-                self.stateDatauPblished = (.success(nil),infoModel)
-            }else{
-                self.stateDatauPblished = (.failed("error?.localizedDescription"),nil)
-            }
-        }
-    }
-    
-//    //width 和 height 必须是 32 的倍数
+//    //模拟数据
 //    func creatImageEmoji(text:String) {
-//        generatingProgress = 0
-//        aiText = text
-//        let postDict:[String : Any] = [
-//            "prompt":text,
-//            "width":textPicW,
-//            "height":textPicH
-//        ]
 //        stateDatauPblished = (.start,nil)
 //        stateDatauPblished = (.progressString(generating(progress: 0.0)),nil)
-//        creatRequest = TSNetworkShared.post(urlType: .textPicCreate,parameters: postDict) { [weak self] data,error in
-//            guard let self = self else { return }
-//            if let dataDict = data as? [String:Any] ,
-//               dataDict.safeInt(forKey: "code") == 200,
-//               let actionId = dataDict["actionId"] as? Int{
-//                if stopNetwork == false {
-//                    self.getActionInfo(action_id:actionId)
-//                }
+//
+//        kDelayOnMainThread(0.2) {
+//            self.stateDatauPblished = (.progressString(self.generating(progress: 0.5)),nil)
+//        }
+//
+//        kDelayOnMainThread(1.0) {
+//            if Bool.random() {
+//                let infoModel = TSActionInfoModel(JSON: self.gennerateType == .poster ? actionInfoDictPoster : actionInfoDictPhoto)
+//                self.stateDatauPblished = (.success(nil),infoModel)
 //            }else{
-//                self.stateDatauPblished = (.failed(error?.localizedDescription ?? ""),nil)
+//                self.stateDatauPblished = (.failed("error?.localizedDescription"),nil)
 //            }
 //        }
 //    }
     
+    //width 和 height 必须是 32 的倍数
+    func creatImageEmoji(text:String) {
+        generatingProgress = 0
+        aiText = text
+        let postDict:[String : Any] = [
+            "prompt":text,
+            "width":textPicW,
+            "height":textPicH
+        ]
+        stateDatauPblished = (.start,nil)
+        stateDatauPblished = (.progressString(generating(progress: 0.0)),nil)
+        creatRequest = TSNetworkShared.post(urlType: .textPicCreate,parameters: postDict) { [weak self] data,error in
+            guard let self = self else { return }
+            if let dataDict = data as? [String:Any] ,
+               dataDict.safeInt(forKey: "code") == 200,
+               let actionId = dataDict["actionId"] as? Int{
+                if stopNetwork == false {
+                    self.getActionInfo(action_id:actionId)
+                }
+            }else{
+                self.stateDatauPblished = (.failed(error?.localizedDescription ?? ""),nil)
+            }
+        }
+    }
+    
     func getActionInfo(action_id:Int){
         queryRequest = TSNetworkShared.get(urlType: .actionInfo,parameters: ["action_id":action_id]) { [weak self] data,error in
             guard let self = self else { return }

+ 0 - 4
AIRingtone/Business/TSAIRintoneVC/TSAIRintoneVC/TSAIRintoneVC.swift

@@ -99,10 +99,6 @@ class TSAIRintoneVC: TSBaseVC {
     
     override func viewWillDisappear(_ animated: Bool) {
         super.viewWillDisappear(animated)
-    }
-    
-    override func viewDidDisappear(_ animated: Bool) {
-        super.viewDidDisappear(animated)
         TSBusinessAudioPlayer.shared.stop()
     }
     

+ 18 - 5
AIRingtone/Business/TSAIRintoneVC/TSGeneralRintoneVC/TSGeneralRintoneVC.swift

@@ -23,10 +23,7 @@ class TSGeneralRintoneVC: TSBottomAlertVC {
         return viewModel
     }()
     
-    lazy var audioPlayer = TSBusinessAudioPlayer{ [weak self] state in
-        guard let self = self else { return }
-        audioPlayerStateChange(state: state)
-    }
+    lazy var audioPlayer = TSBusinessAudioPlayer.shared
     
     @MainActor required init?(coder: NSCoder) {
         fatalError("init(coder:) has not been implemented")
@@ -34,7 +31,10 @@ class TSGeneralRintoneVC: TSBottomAlertVC {
     
     lazy var ringView: TSRingToneCellView = {
         let ringToneView = TSRingToneCellView()
-        ringToneView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(clickPlay)))
+        ringToneView.clickPlayHandel = { [weak self] play  in
+            guard let self = self else { return }
+            clickPlay()
+        }
         return ringToneView
     }()
     
@@ -106,6 +106,11 @@ class TSGeneralRintoneVC: TSBottomAlertVC {
         }
     }
     
+    override func viewWillDisappear(_ animated: Bool) {
+        super.viewWillDisappear(animated)
+        audioPlayer.stop()
+    }
+    
     override func dealThings() {
         if kPurchaseToolShared.kJudgeVipFreeType(vipFreeNumType: .ringtones, vc: self){ return }//判断 vip
         viewModel.creatRintone(text: self.aiText)
@@ -113,6 +118,14 @@ class TSGeneralRintoneVC: TSBottomAlertVC {
             guard let self = self else { return }
             self.upDateView(state: state, model: model)
         }.store(in: &cancellable)
+        
+        NotificationCenter.default.addObserver(forName: .kBusinessAudioStateChange, object: nil, queue: nil) { notification in
+            if let userInfo = notification.userInfo as? [String: TSBusinessAudioPlayer.PlayerState], let state = userInfo["PlayerState"] {
+                kExecuteOnMainThread {
+                    self.audioPlayerStateChange(state: state)
+                }
+            }
+        }
     }
 }
 

+ 36 - 36
AIRingtone/Business/TSAIRintoneVC/TSGeneralRintoneVC/TSGeneralRintoneVM.swift

@@ -29,50 +29,50 @@ class TSGeneralRintoneVM {
     @Published var stateDatauPblished:(TSProgressState,TSActionInfoModel?) = (TSProgressState.none,nil)
     var aiText:String = ""
     var generatingProgress = 0
-    //模拟数据
-    func creatRintone(text:String) {
-
-        stateDatauPblished = (.start,nil)
-        stateDatauPblished = (.progressString(generating(progress: 0.0)),nil)
-
-        kDelayOnMainThread(0.2) {
-            self.stateDatauPblished = (.progressString(self.generating(progress: 0.5)),nil)
-        }
-
-        kDelayOnMainThread(1.0) {
-            if Bool.random() {
-                let infoModel = TSActionInfoModel(JSON: actionInfoDict)
-                self.stateDatauPblished = (.success(nil),infoModel)
-            }else{
-                self.stateDatauPblished = (.failed("error?.localizedDescription"),nil)
-            }
-        }
-    }
-    
- 
+//    //模拟数据
 //    func creatRintone(text:String) {
-//        generatingProgress = 0
-//        aiText = text
-//        let postDict:[String : Any] = [
-//            "prompt":text,
-//            "duration":20
-//        ]
+//
 //        stateDatauPblished = (.start,nil)
 //        stateDatauPblished = (.progressString(generating(progress: 0.0)),nil)
-//        creatRequest = TSNetworkShared.post(urlType: .musicCreate,parameters: postDict) { [weak self] data,error in
-//            guard let self = self else { return }
-//            if let dataDict = data as? [String:Any] ,
-//               dataDict.safeInt(forKey: "code") == 200,
-//               let actionId = dataDict["actionId"] as? Int{
-//                if stopNetwork == false {
-//                    self.getActionInfo(action_id:actionId)
-//                }
+//
+//        kDelayOnMainThread(0.2) {
+//            self.stateDatauPblished = (.progressString(self.generating(progress: 0.5)),nil)
+//        }
+//
+//        kDelayOnMainThread(1.0) {
+//            if Bool.random() {
+//                let infoModel = TSActionInfoModel(JSON: actionInfoDict)
+//                self.stateDatauPblished = (.success(nil),infoModel)
 //            }else{
-//                self.stateDatauPblished = (.failed(error?.localizedDescription ?? ""),nil)
+//                self.stateDatauPblished = (.failed("error?.localizedDescription"),nil)
 //            }
 //        }
 //    }
     
+ 
+    func creatRintone(text:String) {
+        generatingProgress = 0
+        aiText = text
+        let postDict:[String : Any] = [
+            "prompt":text,
+            "duration":20
+        ]
+        stateDatauPblished = (.start,nil)
+        stateDatauPblished = (.progressString(generating(progress: 0.0)),nil)
+        creatRequest = TSNetworkShared.post(urlType: .musicCreate,parameters: postDict) { [weak self] data,error in
+            guard let self = self else { return }
+            if let dataDict = data as? [String:Any] ,
+               dataDict.safeInt(forKey: "code") == 200,
+               let actionId = dataDict["actionId"] as? Int{
+                if stopNetwork == false {
+                    self.getActionInfo(action_id:actionId)
+                }
+            }else{
+                self.stateDatauPblished = (.failed(error?.localizedDescription ?? ""),nil)
+            }
+        }
+    }
+    
     func getActionInfo(action_id:Int){
         queryRequest = TSNetworkShared.get(urlType: .actionInfo,parameters: ["action_id":action_id]) { [weak self] data,error in
             guard let self = self else { return }

+ 2 - 2
AIRingtone/Business/TSAIRintoneVC/TSGenerateHistoryVC/TSGenerateHistoryVC.swift

@@ -66,8 +66,8 @@ class TSGenerateHistoryVC: TSBaseVC {
         super.viewWillAppear(animated)
     }
     
-    override func viewDidDisappear(_ animated: Bool) {
-        super.viewDidDisappear(animated)
+    override func viewWillDisappear(_ animated: Bool) {
+        super.viewWillDisappear(animated)
         TSBusinessAudioPlayer.shared.stop()
     }
     

+ 2 - 2
AIRingtone/Business/TSDiscoverVC/TSDiscoverListVC/TSDiscoverListVC.swift

@@ -90,8 +90,8 @@ class TSDiscoverListVC: TSBaseVC {
         super.viewWillAppear(animated)
     }
     
-    override func viewDidDisappear(_ animated: Bool) {
-        super.viewDidDisappear(animated)
+    override func viewWillDisappear(_ animated: Bool) {
+        super.viewWillDisappear(animated)
         TSBusinessAudioPlayer.shared.stop()
     }
     

+ 2 - 2
AIRingtone/Business/TSDiscoverVC/TSRingDownVC/TSRingDownVC.swift

@@ -82,8 +82,8 @@ class TSRingDownVC: TSBaseVC {
         TSMineRintoneHistory.isHaveNew = false
     }
     
-    override func viewDidDisappear(_ animated: Bool) {
-        super.viewDidDisappear(animated)
+    override func viewWillDisappear(_ animated: Bool) {
+        super.viewWillDisappear(animated)
         TSBusinessAudioPlayer.shared.stop()
     }
     

+ 15 - 8
AIRingtone/Business/TSThemeVC/TSThemeBrowseVC/TSThemeBrowseVC.swift

@@ -16,10 +16,7 @@ class TSThemeBrowseVC: TSBaseVC {
     var closePage:()->Void
     
 
-    lazy var audioPlayer = TSBusinessAudioPlayer{ [weak self] state in
-        guard let self = self else { return }
-        audioPlayerStateChange(state: state)
-    }
+    lazy var audioPlayer = TSBusinessAudioPlayer.shared
     
     lazy var browseViewModel: TSThemeBrowseVM = {
         browseViewModel = TSThemeBrowseVM()
@@ -153,6 +150,14 @@ class TSThemeBrowseVC: TSBaseVC {
         }
         
         setVipUI()
+        
+        NotificationCenter.default.addObserver(forName: .kBusinessAudioStateChange, object: nil, queue: nil) { notification in
+            if let userInfo = notification.userInfo as? [String: TSBusinessAudioPlayer.PlayerState], let state = userInfo["PlayerState"] {
+                kExecuteOnMainThread {
+                    self.audioPlayerStateChange(state: state)
+                }
+            }
+        }
     }
     
     func setVipUI(){
@@ -203,14 +208,16 @@ extension TSThemeBrowseVC {
         }
     }
     
-    override func viewDidDisappear(_ animated: Bool) {
-        super.viewDidDisappear(animated)
-        browseViewModel.audioPlayer?.pause()
+    override func viewWillDisappear(_ animated: Bool) {
+        super.viewWillDisappear(animated)
+        browseViewModel.audioPlayer?.stop()
+        browseViewModel.audioPlayer?.setVolume(volume: 1.0)
     }
-    
+
     override func viewWillAppear(_ animated: Bool) {
         super.viewWillAppear(animated)
         if browseViewModel.audioPlayer?.playerUsable == true {
+            browseViewModel.audioPlayer?.setVolume(volume: 1.0)
             browseViewModel.audioPlayer?.play()
         }else{
             browseViewModel.audioPlayer?.playUrlString( currentModel?.ringtone,loop: true)

+ 2 - 1
AIRingtone/Business/TSThemeVC/TSThemeBrowseVC/VM/TSThemeBrowseVM.swift

@@ -17,8 +17,9 @@ class TSThemeBrowseVM {
     func setFinallyIndex(_ currentIndex:Int,ringtone:String?){
         if finallyIndex != currentIndex{
             finallyIndex = currentIndex
-            audioPlayer?.stop()
+//            audioPlayer?.stop()
             audioPlayer?.playUrlString( ringtone,loop: true)
+            audioPlayer?.setVolume(volume: 1.0)
             finallyIndexChange?()
         }
     }

+ 11 - 6
AIRingtone/Business/TSThemeVC/TSThemeSetVC/TSThemeSetVC.swift

@@ -18,10 +18,7 @@ class TSThemeSetVC: TSBaseVC {
         return false
     }
 
-    lazy var audioPlayer = TSBusinessAudioPlayer{ [weak self] state in
-        guard let self = self else { return }
-        audioPlayerStateChange(state: state)
-    }
+    lazy var audioPlayer = TSBusinessAudioPlayer.shared
 
     lazy var contactsTool: TSContactsTool = {
         let contactsTool = TSContactsTool(targetVC: self)
@@ -105,6 +102,14 @@ class TSThemeSetVC: TSBaseVC {
 
         NotificationCenter.default.addObserver(self, selector: #selector(vipInfoChanged), name: .kPurchaseDidChanged, object: nil)
         setVipUI()
+        
+        NotificationCenter.default.addObserver(forName: .kBusinessAudioStateChange, object: nil, queue: nil) { notification in
+            if let userInfo = notification.userInfo as? [String: TSBusinessAudioPlayer.PlayerState], let state = userInfo["PlayerState"] {
+                kExecuteOnMainThread {
+                    self.audioPlayerStateChange(state: state)
+                }
+            }
+        }
     }
     
     @objc func vipInfoChanged() {
@@ -142,8 +147,8 @@ class TSThemeSetVC: TSBaseVC {
         kPushVC(target: self, modelVC: browseVC)
     }
     
-    override func viewDidDisappear(_ animated: Bool) {
-        super.viewDidDisappear(animated)
+    override func viewWillDisappear(_ animated: Bool) {
+        super.viewWillDisappear(animated)
         audioPlayer.stop()
     }
 

+ 1 - 1
AIRingtone/Common/Tool/TSBusinessAudioPlayer.swift

@@ -260,7 +260,7 @@ class TSBusinessAudioPlayer {
     }
     
     func changePlayerState(_ state:PlayerState){
-        debugPrint("changePlayerState\(state)")
+        debugPrint("changePlayerState=\(state)")
         currentPlayerState = state
         stateChangeBlock(state)
     }