TSGeneralRintoneVC.swift 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. //
  2. // TSGeneralRintoneVC.swift
  3. // AIRingtone
  4. //
  5. // Created by 100Years on 2025/3/6.
  6. //
  7. class TSGeneralRintoneVC: TSBottomAlertVC {
  8. var infoModel:TSActionInfoModel?
  9. var complete:((TSActionInfoModel)->Void)
  10. var aiText:String
  11. init(aiText: String,complete:@escaping ((TSActionInfoModel)->Void)) {
  12. self.aiText = aiText
  13. self.complete = complete
  14. super.init()
  15. }
  16. lazy var viewModel: TSGeneralRintoneVM = {
  17. let viewModel:TSGeneralRintoneVM = TSGeneralRintoneVM()
  18. viewModel.aiText = aiText
  19. return viewModel
  20. }()
  21. lazy var audioPlayer = TSBusinessAudioPlayer.shared
  22. @MainActor required init?(coder: NSCoder) {
  23. fatalError("init(coder:) has not been implemented")
  24. }
  25. lazy var ringView: TSRingToneCellView = {
  26. let ringToneView = TSRingToneCellView()
  27. ringToneView.clickPlayHandel = { [weak self] play in
  28. guard let self = self else { return }
  29. clickPlay()
  30. }
  31. return ringToneView
  32. }()
  33. //############################## 生成动画 ##############################
  34. lazy var generateInView : TSCommonloadingView = {
  35. let generateInView = TSCommonloadingView()
  36. generateInView.cancelBtn.addTarget(self, action: #selector(closePage), for: .touchUpInside)
  37. return generateInView
  38. }()
  39. override func createView() {
  40. super.createView()
  41. view.addSubview(generateInView)
  42. generateInView.snp.makeConstraints { make in
  43. make.top.bottom.leading.trailing.equalTo(0)
  44. }
  45. diyView.addSubview(ringView)
  46. ringView.snp.makeConstraints { make in
  47. make.top.equalTo(98)
  48. make.centerX.equalToSuperview()
  49. make.width.equalTo(k_ScreenWidth - 40)
  50. make.height.equalTo(72)
  51. }
  52. diyView.addSubview(regenerateBtn)
  53. regenerateBtn.snp.makeConstraints { make in
  54. make.top.equalTo(ringView.snp.bottom).offset(16)
  55. make.centerX.equalToSuperview()
  56. }
  57. saveBtn.setTitle("Set As Ringtone".localized, for: .normal)
  58. resultIconImageView.image = resultIcon
  59. bottomViewH = 340.0
  60. bgImageView.addShadow(shadowColor: "#E6E229".uiColor.cgColor, shadowOffset: .zero, shadowRadius: 20, shadowOpacity: 0.8)
  61. diyView.addSubview(failView)
  62. failView.snp.updateConstraints { make in
  63. make.centerY.equalToSuperview().offset(0)
  64. }
  65. }
  66. @objc override func closePage() {
  67. viewModel.cancelAllRequest()
  68. self.dismiss(animated: true, completion: nil)
  69. }
  70. override func clickAgainBtn() {
  71. audioPlayer.stop()
  72. if kPurchaseToolShared.kJudgeVipFreeType(vipFreeNumType: .ringtones, vc: self){ return }//判断 vip
  73. viewModel.creatRintone(text:aiText)
  74. }
  75. @objc override func clickSubmitBtn(){
  76. guard let model = infoModel else {
  77. kShowToastDataMissing()
  78. return
  79. }
  80. audioPlayer.stop()
  81. _ = kPurchaseToolShared.kshareBand(needVip: model.response.vip, vc: self, urlString: model.response.musicUrl, fileName: model.response.title)
  82. }
  83. @objc func clickPlay(){
  84. if audioPlayer.isPlaying{
  85. audioPlayer.stop()
  86. }else{
  87. audioPlayer.playUrlString( infoModel?.response.musicUrl)
  88. }
  89. }
  90. override func viewWillDisappear(_ animated: Bool) {
  91. super.viewWillDisappear(animated)
  92. audioPlayer.stop()
  93. }
  94. override func dealThings() {
  95. if kPurchaseToolShared.kJudgeVipFreeType(vipFreeNumType: .ringtones, vc: self){ return }//判断 vip
  96. viewModel.creatRintone(text: self.aiText)
  97. viewModel.$stateDatauPblished.receive(on: DispatchQueue.main).sink {[weak self] (state,model) in
  98. guard let self = self else { return }
  99. self.upDateView(state: state, model: model)
  100. }.store(in: &cancellable)
  101. NotificationCenter.default.addObserver(forName: .kBusinessAudioStateChange, object: nil, queue: nil) { notification in
  102. if let userInfo = notification.userInfo as? [String: TSBusinessAudioPlayer.PlayerState], let state = userInfo["PlayerState"] {
  103. kExecuteOnMainThread {
  104. self.audioPlayerStateChange(state: state)
  105. }
  106. }
  107. }
  108. }
  109. }
  110. extension TSGeneralRintoneVC{
  111. func setRingViewData(model:TSActionInfoModel) {
  112. ringView.timeLab.text = Float(model.request.duration).floatToMinuteSecond()
  113. ringView.nameLab.text = model.response.title
  114. ringView.setCoverImageView(urlString: model.response.coverUrl)
  115. }
  116. func audioPlayerStateChange(state:TSBusinessAudioPlayer.PlayerState){
  117. switch state {
  118. case .loading(let progress):
  119. if progress == 0.0 {
  120. ringView.isloading = true
  121. }else if progress == 1.0 {
  122. ringView.isloading = false
  123. }
  124. case .play:
  125. ringView.isPlay = true
  126. case .stop:
  127. ringView.isPlay = false
  128. default:
  129. break
  130. }
  131. }
  132. }