APAudioToRingVC.swift 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. //
  2. // APAudioToRingVC.swift
  3. // AIPlayRingtones
  4. //
  5. // Created by 100Years on 2025/5/15.
  6. //
  7. import MobileCoreServices // 用于定义文件类型
  8. class APAudioToRingVC: TSBaseVC {
  9. lazy var navBarView: TSBaseNavContentBarView = {
  10. let navBarView = TSBaseNavContentBarView()
  11. let titleImageView = UIImageView.createImageView(imageName: "nav_title_audioRingtone", contentMode: .scaleToFill)
  12. navBarView.barView.addSubview(titleImageView)
  13. titleImageView.snp.makeConstraints { make in
  14. make.center.equalToSuperview()
  15. }
  16. return navBarView
  17. }()
  18. lazy var viewModel: APAudioToRingVM = {
  19. let viewModel = APAudioToRingVM()
  20. return viewModel
  21. }()
  22. // lazy var vipBtn: UIButton = creatVipBtn()
  23. lazy var cusStackView: TSCustomStackView = creatCusStackView()
  24. lazy var fileView: ASRTRFileView = creatFileView()
  25. lazy var customTextView: ASPromptTextView = creatCustomTextView()
  26. lazy var ringStyleView: ASRTRStyleView = createRTRStyleView()
  27. lazy var creatBtnView: ASAppBtnView = creatCreatBtnView()
  28. override func createView() {
  29. let tapGesture = UITapGestureRecognizer(target: self, action: #selector(clickView))
  30. tapGesture.cancelsTouchesInView = false
  31. view.addGestureRecognizer(tapGesture)
  32. navBarContentView.addSubview(navBarView)
  33. navBarView.snp.makeConstraints { make in
  34. make.edges.equalToSuperview()
  35. }
  36. contentView.addSubview(cusStackView)
  37. cusStackView.snp.makeConstraints { make in
  38. make.edges.equalToSuperview()
  39. }
  40. contentView.addSubview(creatBtnView)
  41. creatBtnView.snp.makeConstraints { make in
  42. make.centerX.equalToSuperview()
  43. make.bottom.equalTo(-16)
  44. make.size.equalTo(creatBtnView.btnSize)
  45. }
  46. setUpCusStackView()
  47. }
  48. override func dealThings() {
  49. viewModel.$isCanGennerate.receive(on: DispatchQueue.main).sink { [weak self] enble in
  50. guard let self = self else { return }
  51. setCreatBtnEnabled()
  52. }.store(in: &cancellable)
  53. NotificationCenter.default.addObserver(forName: .kBaseOperationQueueCountChanged, object: nil, queue: .main) { [weak self] notification in
  54. guard let self = self else { return }
  55. if let userInfo = notification.userInfo as? [String: Any], let _ = userInfo["ASBaseOperationQueue"] as? ASGenerateRingToRingOperationQueue {
  56. setCreatBtnEnabled()
  57. }
  58. }
  59. NotificationCenter.default.addObserver(forName: .kGenerateRTROperationChanged, object: nil, queue: .main) { [weak self] notification in
  60. guard let self = self else { return }
  61. if let userInfo = notification.userInfo as? [String: Any], let state = userInfo["state"] as? ASProgressState {
  62. if case let .progress(_,progressString) = state {
  63. creatBtnView.setLoadingText(text: progressString)
  64. }
  65. }
  66. }
  67. }
  68. override func viewWillDisappear(_ animated: Bool) {
  69. super.viewWillDisappear(animated)
  70. TSBusinessAudioPlayer.shared.stop()
  71. }
  72. }
  73. extension APAudioToRingVC {
  74. @objc func clickView() {
  75. view.endEditing(true)
  76. }
  77. func setCreatBtnEnabled() {
  78. let isAvailability = ASGenerateRingToRingOperationQueue.shared.isAvailability
  79. if viewModel.isCanGennerate, isAvailability {
  80. creatBtnView.setBtnEnabled(isEnabled: true)
  81. creatBtnView.loading = false
  82. } else {
  83. creatBtnView.setBtnEnabled(isEnabled: false)
  84. let loading = !isAvailability
  85. if creatBtnView.loading != loading {
  86. creatBtnView.loading = loading
  87. }
  88. }
  89. }
  90. func generateAI() {
  91. view.endEditing(true)
  92. let gennerateVC = ASRingGeneratorVC(generateStyleModel: viewModel.generateStyleModel)
  93. kPresentModalVC(target: self, modelVC: gennerateVC, transitionStyle: .crossDissolve)
  94. }
  95. }