123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- //
- // TSGeneralRintoneVC.swift
- // AIRingtone
- //
- // Created by 100Years on 2025/3/6.
- //
- class TSGeneralRintoneVC: TSBottomAlertVC {
-
- var infoModel:TSActionInfoModel?
- var complete:((TSActionInfoModel)->Void)
-
- var aiText:String
- init(aiText: String,complete:@escaping ((TSActionInfoModel)->Void)) {
- self.aiText = aiText
- self.complete = complete
- super.init()
- }
-
- lazy var viewModel: TSGeneralRintoneVM = {
- let viewModel:TSGeneralRintoneVM = TSGeneralRintoneVM()
- viewModel.aiText = aiText
- return viewModel
- }()
-
- lazy var audioPlayer = TSBusinessAudioPlayer.shared
-
- @MainActor required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- lazy var ringView: TSRingToneCellView = {
- let ringToneView = TSRingToneCellView()
- ringToneView.clickPlayHandel = { [weak self] play in
- guard let self = self else { return }
- clickPlay()
- }
- return ringToneView
- }()
-
- //############################## 生成动画 ##############################
- lazy var generateInView : TSCommonloadingView = {
- let generateInView = TSCommonloadingView()
- generateInView.cancelBtn.addTarget(self, action: #selector(closePage), for: .touchUpInside)
- return generateInView
- }()
- override func createView() {
- super.createView()
-
- view.addSubview(generateInView)
- generateInView.snp.makeConstraints { make in
- make.top.bottom.leading.trailing.equalTo(0)
- }
- diyView.addSubview(ringView)
- ringView.snp.makeConstraints { make in
- make.top.equalTo(98)
- make.centerX.equalToSuperview()
- make.width.equalTo(k_ScreenWidth - 40)
- make.height.equalTo(72)
- }
-
- diyView.addSubview(regenerateBtn)
- regenerateBtn.snp.makeConstraints { make in
- make.top.equalTo(ringView.snp.bottom).offset(16)
- make.centerX.equalToSuperview()
- }
- saveBtn.setTitle("Set As Ringtone".localized, for: .normal)
- resultIconImageView.image = resultIcon
- bottomViewH = 340.0
- bgImageView.addShadow(shadowColor: "#E6E229".uiColor.cgColor, shadowOffset: .zero, shadowRadius: 20, shadowOpacity: 0.8)
-
- diyView.addSubview(failView)
- failView.snp.updateConstraints { make in
- make.centerY.equalToSuperview().offset(0)
- }
- }
-
- @objc override func closePage() {
- viewModel.cancelAllRequest()
- self.dismiss(animated: true, completion: nil)
- }
-
- override func clickAgainBtn() {
- audioPlayer.stop()
- if kPurchaseToolShared.kJudgeVipFreeType(vipFreeNumType: .ringtones, vc: self){ return }//判断 vip
- viewModel.creatRintone(text:aiText)
- }
-
- @objc override func clickSubmitBtn(){
-
- guard let model = infoModel else {
- kShowToastDataMissing()
- return
- }
- audioPlayer.stop()
- _ = kPurchaseToolShared.kshareBand(needVip: model.response.vip, vc: self, urlString: model.response.musicUrl, fileName: model.response.title)
- }
-
- @objc func clickPlay(){
- if audioPlayer.isPlaying{
- audioPlayer.stop()
- }else{
- audioPlayer.playUrlString( infoModel?.response.musicUrl)
- }
- }
-
- 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)
- viewModel.$stateDatauPblished.receive(on: DispatchQueue.main).sink {[weak self] (state,model) in
- 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)
- }
- }
- }
- }
- }
- extension TSGeneralRintoneVC{
- func setRingViewData(model:TSActionInfoModel) {
- ringView.timeLab.text = Float(model.request.duration).floatToMinuteSecond()
- ringView.nameLab.text = model.response.title
- ringView.setCoverImageView(urlString: model.response.coverUrl)
- }
-
- func audioPlayerStateChange(state:TSBusinessAudioPlayer.PlayerState){
- switch state {
- case .loading(let progress):
- if progress == 0.0 {
- ringView.isloading = true
- }else if progress == 1.0 {
- ringView.isloading = false
- }
- case .play:
- ringView.isPlay = true
- case .stop:
- ringView.isPlay = false
- default:
- break
- }
- }
- }
|