TSGenmojiGennerateVC.swift 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. //
  2. // TSGenmojiGennerateVC.swift
  3. // AIEmoji
  4. //
  5. // Created by 100Years on 2025/1/17.
  6. //
  7. class TSGenmojiGennerateVC: 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:TSGenmojiGennerateViewModel = TSGenmojiGennerateViewModel()
  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: 24.0)
  22. return netWorkImageView
  23. }()
  24. lazy var generateInView : TSCommonloadingView = {
  25. let generateInView = TSCommonloadingView()
  26. return generateInView
  27. }()
  28. override func createView() {
  29. super.createView()
  30. bottomView.addSubview(generateInView)
  31. generateInView.snp.makeConstraints { make in
  32. make.top.equalTo(140)
  33. make.centerX.equalToSuperview()
  34. }
  35. bottomView.addSubview(netWorkImageView)
  36. netWorkImageView.snp.makeConstraints { make in
  37. make.top.equalTo(80)
  38. make.centerX.equalToSuperview()
  39. make.width.equalTo(200)
  40. make.height.equalTo(200)
  41. }
  42. }
  43. override func closePage() {
  44. if let model = imageModel {
  45. complete(model)
  46. }
  47. self.dismiss(animated: true, completion: nil)
  48. }
  49. @objc override func clickSubmitBtn(){
  50. viewModel.creatImageEmoji(text:aiText)
  51. }
  52. @objc override func clickCancelBtn(){
  53. if let image = getSuccessImage() {
  54. UIDevice.copyImage(image: image)
  55. kSavePhotoSuccesswShared.show(atView: self.view,text: "Copy Successfully".localized,showViewBtn:false)
  56. }
  57. }
  58. @objc override func clickConfirmBtn(){
  59. if let image = getSuccessImage() {
  60. PhotoManagerShared.saveImageToAlbum(image) { success, error in
  61. if success {
  62. kSavePhotoSuccesswShared.show(atView:self.view)
  63. }else{
  64. debugPrint(error)
  65. }
  66. }
  67. }
  68. }
  69. override func dealThings() {
  70. viewModel.creatImageEmoji(text: self.aiText)
  71. viewModel.$stateDatauPblished.receive(on: DispatchQueue.main).sink {[weak self] (state,model) in
  72. guard let self = self else { return }
  73. self.upDateView(state: state, model: model)
  74. }.store(in: &cancellable)
  75. }
  76. }
  77. extension TSGenmojiGennerateVC {
  78. func getSuccessImage()->UIImage?{
  79. if let image = netWorkImageView.image {
  80. return image.pngImage
  81. }
  82. return nil
  83. }
  84. }
  85. extension TSGenmojiGennerateVC {
  86. func upDateView(state:TSProgressState,model:TSGenmojiModel?){
  87. switch state {
  88. case .failed(let errorStr):
  89. showError(text: errorStr)
  90. case .success:
  91. if let model = model {
  92. showSuccess(model: model)
  93. }else{
  94. showError(text: nil)
  95. }
  96. default:
  97. showLoading()
  98. }
  99. }
  100. func showLoading(){
  101. generateInView.isHidden = false
  102. generateInView.showLoading(text: "Generating...".localized)
  103. generateInView.isRotating = true
  104. submitBtn.isHidden = true
  105. cancelBtn.isHidden = true
  106. confirmBtn.isHidden = true
  107. xBtn.isHidden = true
  108. isClickTheBlankClosePage = false
  109. }
  110. func showError(text:String?){
  111. let msg = "Failed to Generate, please try later".localized
  112. // if let str = text{
  113. // if str.count == 0 {
  114. // msg = "Generation failed".localized
  115. // }else{
  116. // msg = str
  117. // }
  118. // }else{
  119. // msg = "Generation failed".localized
  120. // }
  121. generateInView.isHidden = false
  122. generateInView.showError(text: msg)
  123. generateInView.isRotating = false
  124. submitBtn.isHidden = false
  125. cancelBtn.isHidden = true
  126. confirmBtn.isHidden = true
  127. xBtn.isHidden = false
  128. isClickTheBlankClosePage = true
  129. }
  130. func showSuccess(model:TSGenmojiModel){
  131. generateInView.isHidden = true
  132. generateInView.isRotating = false
  133. submitBtn.isHidden = true
  134. cancelBtn.isHidden = false
  135. confirmBtn.isHidden = false
  136. xBtn.isHidden = false
  137. imageModel = model
  138. isClickTheBlankClosePage = true
  139. cancelBtn.isEnabled = false
  140. confirmBtn.isEnabled = false
  141. self.netWorkImageView.setAsyncImage(urlString: model.response.resultUrl,placeholder:kPlaceholderImage){ [weak self] image in
  142. guard let self = self else { return }
  143. cancelBtn.isEnabled = true
  144. confirmBtn.isEnabled = true
  145. }
  146. kPurchaseDefault.useOnceForFree()
  147. }
  148. }