TSTextPicGennerateVC.swift 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. //
  2. // TSTextPicGennerateVC.swift
  3. // AIEmoji
  4. //
  5. // Created by 100Years on 2025/2/20.
  6. //
  7. class TSTextPicGennerateVC: TSBottomAlertVC {
  8. var imageModel:TSGenmojiModel?
  9. var complete:((TSGenmojiModel)->Void)
  10. var aiText:String
  11. init(aiText: String,complete:@escaping ((TSGenmojiModel)->Void)) {
  12. self.aiText = aiText
  13. self.complete = complete
  14. super.init()
  15. }
  16. var viewModel:TSTextPicGennerateVM = TSTextPicGennerateVM()
  17. @MainActor required init?(coder: NSCoder) {
  18. fatalError("init(coder:) has not been implemented")
  19. }
  20. lazy var netWorkImageView : UIImageView = {
  21. let netWorkImageView = UIImageView.createImageView(imageName: "",corner: 16.0)
  22. netWorkImageView.isHidden = true
  23. return netWorkImageView
  24. }()
  25. lazy var generateInView : TSCommonloadingView = {
  26. let generateInView = TSCommonloadingView()
  27. return generateInView
  28. }()
  29. //大保存按钮
  30. lazy var bigSaveBtn: UIButton = {
  31. let bigSaveBtn = kCreateNormalSubmitBtn(title: "Save".localized) { [weak self] in
  32. guard let self = self else { return }
  33. clickConfirmBtn()
  34. }
  35. bigSaveBtn.isHidden = true
  36. return bigSaveBtn
  37. }()
  38. lazy var regenerateBtn: UIButton = {
  39. let regenerateBtn = UIButton.createButton(
  40. title: "regenerate",
  41. image: UIImage(named: "refresh_gary"),
  42. backgroundColor:.white.withAlphaComponent(0.1),
  43. font: .font(size: 12),
  44. titleColor: .white.withAlphaComponent(0.6),
  45. corner: 8.0)
  46. { [weak self] in
  47. guard let self = self else { return }
  48. clickSubmitBtn()
  49. }
  50. regenerateBtn.contentEdgeInsets = UIEdgeInsets(top: 4, left: 7, bottom: 4, right: 7)
  51. regenerateBtn.imageEdgeInsets = UIEdgeInsets(top: 0, left: -4, bottom: 0, right: 0)
  52. regenerateBtn.isHidden = true
  53. return regenerateBtn
  54. }()
  55. override func createView() {
  56. super.createView()
  57. bottomView.frame = CGRectMake(0, 92, k_ScreenWidth, k_ScreenHeight-92)
  58. cancelBtn.isHidden = true
  59. confirmBtn.isHidden = true
  60. bottomView.addSubview(bigSaveBtn)
  61. bigSaveBtn.snp.makeConstraints { make in
  62. make.bottom.equalTo(-34)
  63. make.centerX.equalToSuperview()
  64. make.width.equalTo(329)
  65. make.height.equalTo(60)
  66. }
  67. bottomView.addSubview(generateInView)
  68. generateInView.snp.makeConstraints { make in
  69. make.center.equalToSuperview()
  70. }
  71. bottomView.addSubview(netWorkImageView)
  72. // netWorkImageView.snp.makeConstraints { make in
  73. // make.top.equalTo(94)
  74. // make.centerX.equalToSuperview()
  75. // make.width.equalTo(249*kDesignScale)
  76. // make.height.equalTo(441*kDesignScale)
  77. // }
  78. let netWorkImageViewW = k_ScreenWidth - 120.0
  79. let netWorkImageViewH = netWorkImageViewW/kTextWHScale
  80. netWorkImageView.snp.makeConstraints { make in
  81. make.top.equalTo(90*kDesignScale)
  82. make.centerX.equalToSuperview()
  83. make.width.equalTo(netWorkImageViewW)
  84. make.height.equalTo(netWorkImageViewH)
  85. }
  86. bottomView.addSubview(regenerateBtn)
  87. regenerateBtn.snp.makeConstraints { make in
  88. make.top.equalTo(netWorkImageView.snp.bottom).offset(16)
  89. make.centerX.equalToSuperview()
  90. make.height.equalTo(28)
  91. }
  92. }
  93. override func closePage() {
  94. viewModel.cancelAllRequest()
  95. self.dismiss(animated: true, completion: nil)
  96. }
  97. //重试
  98. @objc override func clickSubmitBtn(){
  99. //判断 vip
  100. if kJudgeVip(externalBool: kPurchaseDefault.freeNumAvailable(type: .textGeneratePic) == false, vc: self) {[weak self] in
  101. guard let self = self else { return }
  102. }{ return }
  103. viewModel.creatImageEmoji(text:aiText)
  104. }
  105. // @objc override func clickCancelBtn(){
  106. // if let image = getSuccessImage() {
  107. // UIDevice.copyImage(image: image)
  108. // kSavePhotoSuccesswShared.show(atView: self.view,text: "Copy Successfully".localized,showViewBtn:false)
  109. // }
  110. // }
  111. //保存功能
  112. @objc override func clickConfirmBtn(){
  113. if let image = getSuccessImage() {
  114. PhotoManagerShared.saveImageToAlbum(image) { success, error in
  115. if success {
  116. kSavePhotoSuccesswShared.show(atView:self.view)
  117. }else{
  118. debugPrint(error)
  119. }
  120. }
  121. }
  122. }
  123. override func dealThings() {
  124. viewModel.creatImageEmoji(text: self.aiText)
  125. viewModel.$stateDatauPblished.receive(on: DispatchQueue.main).sink {[weak self] (state,model) in
  126. guard let self = self else { return }
  127. self.upDateView(state: state, model: model)
  128. }.store(in: &cancellable)
  129. }
  130. }
  131. extension TSTextPicGennerateVC {
  132. func getSuccessImage()->UIImage?{
  133. if let image = netWorkImageView.image {
  134. return image.pngImage
  135. }
  136. return nil
  137. }
  138. }
  139. extension TSTextPicGennerateVC {
  140. func upDateView(state:TSProgressState,model:TSGenmojiModel?){
  141. switch state {
  142. case .failed(let errorStr):
  143. showError(text: errorStr)
  144. case .success:
  145. if let model = model {
  146. showSuccess(model: model)
  147. }else{
  148. showError(text: nil)
  149. }
  150. case .progressString(let string):
  151. showProgress(text: string)
  152. default:
  153. showLoading()
  154. }
  155. }
  156. func showProgress(text:String) {
  157. generateInView.isHidden = false
  158. generateInView.showLoading(text: text)
  159. generateInView.isRotating = true
  160. submitBtn.isHidden = true
  161. // cancelBtn.isHidden = true
  162. // xBtn.isHidden = false
  163. confirmBtn.isHidden = true
  164. bigSaveBtn.isHidden = true
  165. isClickTheBlankClosePage = false
  166. regenerateBtn.isHidden = true
  167. netWorkImageView.isHidden = true
  168. }
  169. func showLoading(){
  170. generateInView.isHidden = false
  171. generateInView.showLoading(text: "Generating...".localized)
  172. generateInView.isRotating = true
  173. submitBtn.isHidden = true
  174. // cancelBtn.isHidden = true
  175. // xBtn.isHidden = false
  176. confirmBtn.isHidden = true
  177. bigSaveBtn.isHidden = true
  178. isClickTheBlankClosePage = false
  179. regenerateBtn.isHidden = true
  180. netWorkImageView.isHidden = true
  181. }
  182. func showError(text:String?){
  183. let msg = "Failed to Generate, please try later".localized
  184. generateInView.isHidden = false
  185. generateInView.showError(text: msg)
  186. generateInView.isRotating = false
  187. submitBtn.isHidden = false
  188. bigSaveBtn.isHidden = true
  189. // cancelBtn.isHidden = true
  190. // confirmBtn.isHidden = true
  191. // xBtn.isHidden = false
  192. isClickTheBlankClosePage = true
  193. regenerateBtn.isHidden = true
  194. netWorkImageView.isHidden = true
  195. }
  196. func showSuccess(model:TSGenmojiModel){
  197. generateInView.isHidden = true
  198. generateInView.isRotating = false
  199. submitBtn.isHidden = true
  200. bigSaveBtn.isHidden = false
  201. // cancelBtn.isHidden = true
  202. // confirmBtn.isHidden = false
  203. // xBtn.isHidden = false
  204. imageModel = model
  205. isClickTheBlankClosePage = true
  206. regenerateBtn.isHidden = false
  207. cancelBtn.isEnabled = false
  208. confirmBtn.isEnabled = false
  209. netWorkImageView.isHidden = false
  210. // netWorkImageView.snp.updateConstraints { make in
  211. // make.top.equalTo(94)
  212. // make.centerX.equalToSuperview()
  213. // make.width.equalTo(249*kDesignScale)
  214. // make.height.equalTo(441*kDesignScale)
  215. // }
  216. self.netWorkImageView.setAsyncImage(urlString: model.response.resultUrl,placeholder:kPlaceholderImage){ [weak self] image in
  217. guard let self = self else { return }
  218. cancelBtn.isEnabled = true
  219. confirmBtn.isEnabled = true
  220. }
  221. kPurchaseDefault.useOnceForFree(type: .textGeneratePic)
  222. if let model = imageModel {
  223. complete(model)
  224. }
  225. }
  226. }