TSTTPInputVC.swift 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. //
  2. // TSTTPInputVC.swift
  3. // AIEmoji
  4. //
  5. // Created by 100Years on 2025/3/11.
  6. //
  7. class TSTTPInputVC: TSBaseVC {
  8. var viewH:CGFloat{
  9. get {
  10. if cusStackView.viewH > 0{
  11. return cusStackView.viewH
  12. }
  13. return 489.0
  14. }
  15. }
  16. var reloadUIBlock:(()->Void)?
  17. lazy var viewModel: TSTTPInputVM = {
  18. let viewModel:TSTTPInputVM = TSTTPInputVM()
  19. viewModel.isCanGennerateBlock = { [weak self] enabled in
  20. guard let self = self else { return }
  21. creatBtnView.setBtnEnabled(isEnabled: enabled)
  22. }
  23. return viewModel
  24. }()
  25. //###################################### cusStackView ######################################
  26. lazy var cusStackView: TSCustomStackView = {
  27. let cusStackView = TSCustomStackView(axis: .vertical,spacing: 8)
  28. cusStackView.scrollView.isScrollEnabled = false
  29. return cusStackView
  30. }()
  31. //###################################### 输入框 ######################################
  32. lazy var promptTextView: TSPromptTextView = {
  33. let promptTextView = TSPromptTextView(randomTextArray: kRandomTextArray) { [weak self] text in
  34. guard let self = self else { return }
  35. viewModel.promptText = text
  36. }
  37. promptTextView.sendBolck = { [weak self] text in
  38. guard let self = self else { return }
  39. if creatBtnView.creatBtn.isEnabled {
  40. generateImage()
  41. }
  42. }
  43. return promptTextView
  44. }()
  45. //###################################### Prompt类型 ######################################
  46. lazy var promptStyleView: TSTTPStyleView = {
  47. let promptStyleView = TSTTPStyleView()
  48. promptStyleView.currentIndexPath = IndexPath(item: viewModel.selectedStyleIndex, section: 0)
  49. promptStyleView.dataArray = viewModel.ptpStyleModels
  50. promptStyleView.selectedValueBlock = { [weak self] model in
  51. guard let self = self else { return }
  52. viewModel.selectPromptModel = model
  53. updateVipView()
  54. }
  55. return promptStyleView
  56. }()
  57. //###################################### Button ######################################
  58. lazy var creatBtnView:TSGeneralBtnView = {
  59. let creatBtnView = TSGeneralBtnView {[weak self] in
  60. guard let self = self else { return }
  61. generateImage()
  62. }
  63. creatBtnView.setBtnEnabled(isEnabled: false)
  64. return creatBtnView
  65. }()
  66. //###################################### Generate History ######################################
  67. lazy var historyTitleView: TSTitleView = {
  68. let historyTitleView = TSTitleView()
  69. historyTitleView.titleLab.text = "Generate History".localized
  70. return historyTitleView
  71. }()
  72. override func createView() {
  73. view.backgroundColor = .clear
  74. setNavBarViewHidden(true)
  75. let tapGesture = UITapGestureRecognizer(target: self, action: #selector(clickView))
  76. tapGesture.cancelsTouchesInView = false
  77. view.addGestureRecognizer(tapGesture)
  78. contentView.addSubview(cusStackView)
  79. cusStackView.snp.makeConstraints { make in
  80. make.top.leading.bottom.trailing.equalTo(0)
  81. }
  82. cusStackView.addSubviewToStack(promptTextView)
  83. cusStackView.addSubviewToStack(promptStyleView)
  84. cusStackView.addSubviewToStack(creatBtnView)
  85. creatBtnView.snp.makeConstraints { make in
  86. make.height.equalTo(creatBtnView.viewH)
  87. make.width.equalTo(k_ScreenWidth)
  88. }
  89. }
  90. override func dealThings() {
  91. updateVipView()
  92. NotificationCenter.default.addObserver(self, selector: #selector(vipInfoChanged), name: .kPurchaseDidChanged, object: nil)
  93. }
  94. @objc func vipInfoChanged() {
  95. updateVipView()
  96. }
  97. @objc func clickView() {
  98. view.endEditing(true)
  99. }
  100. @objc func clickCollectionView() {
  101. view.endEditing(true)
  102. }
  103. func updateVipView() {
  104. kExecuteOnMainThread {
  105. var showVip = kPurchaseDefault.generateVipShow(type: .textGeneratePic)
  106. if showVip == false {
  107. showVip = self.viewModel.selectPromptModel?.isVip ?? false
  108. }
  109. kSetBtnVipIcon(btn: self.creatBtnView.creatBtn, show: showVip)
  110. }
  111. }
  112. }
  113. extension TSTTPInputVC {
  114. func generateImage() {
  115. guard let selectPromptModel = viewModel.selectPromptModel else { return }
  116. var isVip = kPurchaseDefault.freeNumAvailable(type: .textGeneratePic) == false
  117. if viewModel.selectPromptModel?.isVip == true {
  118. isVip = true
  119. }
  120. //判断 vip
  121. if kJudgeVip(externalBool: isVip, vc: self) { [weak self] in
  122. guard let self = self else { return }
  123. }{ return }
  124. let gennerateVC = TSTextPicGennerateVC(aiText: viewModel.prompt,style: selectPromptModel.style) {[weak self] model in
  125. guard let self = self else { return }
  126. model.request.promptSort = viewModel.promptText
  127. viewModel.saveModel(model: model)
  128. updateVipView()
  129. reloadUIBlock?()
  130. }
  131. kPresentModalVC(target: self, modelVC: gennerateVC,transitionStyle: .crossDissolve)
  132. }
  133. }