TSTTPInputVC.swift 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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 605.0
  14. // return 489.0+136.0
  15. }
  16. }
  17. var reloadUIBlock:(()->Void)?
  18. lazy var viewModel: TSTTPInputVM = {
  19. let viewModel:TSTTPInputVM = TSTTPInputVM()
  20. viewModel.isCanGennerateBlock = { [weak self] enabled in
  21. guard let self = self else { return }
  22. creatBtnView.setBtnEnabled(isEnabled: enabled)
  23. }
  24. return viewModel
  25. }()
  26. //###################################### 导航栏 view ######################################
  27. lazy var vipBtn: UIButton = {
  28. let vipBtn = UIButton.createButton(image: UIImage(named: "nav_vip")) { [weak self] in
  29. guard let self = self else { return }
  30. TSPurchaseVC.show(target: self) {}
  31. }
  32. return vipBtn
  33. }()
  34. lazy var navBarView: TSBaseNavContentBarView = {
  35. let navBarView = TSBaseNavContentBarView()
  36. let titleImageView = UIImageView.createImageView(imageName: "nav_title_ttp",contentMode: .scaleToFill)
  37. navBarView.barView.addSubview(titleImageView)
  38. titleImageView.snp.makeConstraints { make in
  39. make.centerY.equalToSuperview()
  40. make.left.equalTo(16)
  41. }
  42. navBarView.barView.addSubview(vipBtn)
  43. vipBtn.snp.makeConstraints { make in
  44. make.centerY.equalToSuperview()
  45. make.trailing.equalTo(-16)//(-60)
  46. make.width.height.equalTo(24)
  47. }
  48. return navBarView
  49. }()
  50. //###################################### cusStackView ######################################
  51. lazy var cusStackView: TSCustomStackView = {
  52. let cusStackView = TSCustomStackView(axis: .vertical,spacing: 0)
  53. return cusStackView
  54. }()
  55. //###################################### 输入框 ######################################
  56. lazy var promptTextView: TSPromptTextView = {
  57. let promptTextView = TSPromptTextView(randomTextArray: kRandomTextArray) { [weak self] text in
  58. guard let self = self else { return }
  59. viewModel.promptText = text
  60. }
  61. promptTextView.sendBolck = { [weak self] text in
  62. guard let self = self else { return }
  63. if creatBtnView.isEnabled {
  64. generateImage()
  65. }
  66. }
  67. promptTextView.AIBolck = { [weak self] in
  68. guard let self = self else { return }
  69. let vc = TSChatViewController()
  70. vc.viewModel.uiStyle = .perfectHint
  71. // vc.inputText = promptTextView.text
  72. vc.textBlock = { [weak self] text ,bool in
  73. guard let self = self else { return }
  74. promptTextView.setText(text: text)
  75. viewModel.promptText = text
  76. if bool {
  77. kDelayMainShort {
  78. self.view.endEditing(true)
  79. }
  80. }
  81. }
  82. kPushVC(target: self, modelVC: vc)
  83. }
  84. return promptTextView
  85. }()
  86. //###################################### Prompt类型 ######################################
  87. lazy var promptStyleView: TSTTPStyleView = creatPromptStyleView()
  88. //###################################### 尺寸类型 ######################################
  89. lazy var ratioStyleView: TSTTPRatioView = {
  90. let ratioStyleView = TSTTPRatioView()
  91. ratioStyleView.selectRatio = viewModel.selectRatio //一定要放在dataArray设置前
  92. ratioStyleView.dataArray = viewModel.ttpRatioDataArray
  93. ratioStyleView.selectedValueBlock = { [weak self] model in
  94. guard let self = self else { return }
  95. viewModel.selectRatio = model
  96. updateVipView()
  97. }
  98. return ratioStyleView
  99. }()
  100. //###################################### collectionComponent ######################################
  101. var collectionViewObserver: CollectionViewObserver!
  102. let collectionViewBtootm:CGFloat = 80
  103. lazy var collectionComponent: TSCollectionViewComponent = creatCollectionComponent()
  104. var vipFreeNumType:VipFreeNumType = VipFreeNumType.textGeneratePic
  105. //###################################### Button ######################################
  106. lazy var creatBtnView:TSAppBtnView = {
  107. let creatBtnView = TSAppBtnView()
  108. creatBtnView.setUpButton(style: .generate, vipFreeNumType: vipFreeNumType) { [weak self] in
  109. guard let self = self else { return }
  110. generateImage()
  111. }
  112. creatBtnView.setBtnEnabled(isEnabled: false)
  113. creatBtnView.isIconVipBlock = { [weak self] in
  114. guard let self = self else { return false}
  115. var showVip = kPurchaseDefault.generateVipShow(type: vipFreeNumType)
  116. if showVip == false {
  117. showVip = self.viewModel.selectPromptModel.isVip
  118. }
  119. return showVip
  120. }
  121. creatBtnView.isClickVipBlock = { [weak self] in
  122. guard let self = self else { return false}
  123. var isVip = kPurchaseDefault.freeNumAvailable(type: vipFreeNumType) == false
  124. if viewModel.selectPromptModel.isVip == true {
  125. isVip = true
  126. }
  127. return isVip
  128. }
  129. return creatBtnView
  130. }()
  131. override func createView() {
  132. let tapGesture = UITapGestureRecognizer(target: self, action: #selector(clickView))
  133. tapGesture.cancelsTouchesInView = false
  134. view.addGestureRecognizer(tapGesture)
  135. navBarContentView.addSubview(navBarView)
  136. navBarView.snp.makeConstraints { make in
  137. make.edges.equalToSuperview()
  138. }
  139. contentView.addSubview(cusStackView)
  140. cusStackView.snp.makeConstraints { make in
  141. make.top.leading.bottom.trailing.equalTo(0)
  142. }
  143. cusStackView.addSubviewToStack(promptTextView)
  144. cusStackView.addSubviewToStack(promptStyleView)
  145. cusStackView.addSubviewToStack(ratioStyleView)
  146. cusStackView.addSubviewToStack(collectionComponent.collectionView, length: 0)
  147. cusStackView.addSpacing(length: collectionViewBtootm)
  148. contentView.addSubview(creatBtnView)
  149. creatBtnView.snp.makeConstraints { make in
  150. make.bottom.equalTo(-16)
  151. make.leading.equalTo(16)
  152. make.trailing.equalTo(-16)
  153. make.height.equalTo(48)
  154. }
  155. }
  156. override func dealThings() {
  157. updateVipView()
  158. NotificationCenter.default.addObserver(self, selector: #selector(vipInfoChanged), name: .kPurchaseDidChanged, object: nil)
  159. observerCollectionView()
  160. updateListDataView()
  161. // 同时 VC主动刷新UI界面
  162. NotificationCenter.default.addObserver(forName: .kTTPDataChanged, object: nil, queue: OperationQueue.main) { [weak self] _ in
  163. guard let self = self else { return }
  164. DispatchQueue.main.async {
  165. self.updateListDataView()
  166. }
  167. }
  168. }
  169. @objc func vipInfoChanged() {
  170. updateVipView()
  171. }
  172. @objc func clickView() {
  173. view.endEditing(true)
  174. }
  175. func updateVipView() {
  176. kExecuteOnMainThread {
  177. self.vipBtn.isHidden = PurchaseManager.default.isVip
  178. self.creatBtnView.updateVipView()
  179. }
  180. }
  181. }
  182. extension TSTTPInputVC {
  183. func generateImage() {
  184. var isVip = kPurchaseDefault.freeNumAvailable(type: .textGeneratePic) == false
  185. if viewModel.selectPromptModel.isVip == true {
  186. isVip = true
  187. }
  188. if kJudgeVip(externalBool: isVip, vc: self) { return } //判断 vip
  189. let gennerateVC = TSTextPicGennerateVC(generateStyleModel: viewModel.generateStyleModel) {[weak self] model in
  190. guard let self = self else { return }
  191. model.request.promptSort = viewModel.promptText
  192. viewModel.saveModel(model: model)
  193. updateVipView()
  194. reloadUIBlock?()
  195. updateListDataView()
  196. }
  197. kPresentModalVC(target: self, modelVC: gennerateVC,transitionStyle: .crossDissolve)
  198. }
  199. }