TSGenmojiGennerateVC.swift 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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. self.dismiss(animated: true, completion: nil)
  45. }
  46. @objc override func clickSubmitBtn(){
  47. viewModel.creatImageEmoji(text:aiText)
  48. }
  49. @objc override func clickCancelBtn(){
  50. if let image = getSuccessImage() {
  51. UIDevice.copyImage(image: image)
  52. if let model = imageModel {
  53. complete(model)
  54. }
  55. closePage()
  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. if let model = self.imageModel {
  64. self.complete(model)
  65. }
  66. self.closePage()
  67. }else{
  68. debugPrint(error)
  69. }
  70. }
  71. }
  72. }
  73. override func dealThings() {
  74. viewModel.creatImageEmoji(text: self.aiText)
  75. viewModel.$stateDatauPblished.receive(on: DispatchQueue.main).sink {[weak self] (state,model) in
  76. guard let self = self else { return }
  77. self.upDateView(state: state, model: model)
  78. }.store(in: &cancellable)
  79. }
  80. }
  81. extension TSGenmojiGennerateVC {
  82. func getSuccessImage()->UIImage?{
  83. if let image = netWorkImageView.image {
  84. return image.pngImage
  85. }
  86. return nil
  87. }
  88. }
  89. extension TSGenmojiGennerateVC {
  90. func upDateView(state:TSProgressState,model:TSGenmojiModel?){
  91. switch state {
  92. case .failed(let _):
  93. showError()
  94. case .success:
  95. if let model = model {
  96. showSuccess(model: model)
  97. }else{
  98. showError()
  99. }
  100. default:
  101. showLoading()
  102. }
  103. }
  104. func showLoading(){
  105. generateInView.isHidden = false
  106. generateInView.showLoading(text: "generate in...".localized)
  107. generateInView.isRotating = true
  108. submitBtn.isHidden = true
  109. cancelBtn.isHidden = true
  110. confirmBtn.isHidden = true
  111. xBtn.isHidden = true
  112. }
  113. func showError(){
  114. generateInView.isHidden = false
  115. generateInView.showError(text: "Generation failed".localized)
  116. generateInView.isRotating = false
  117. submitBtn.isHidden = false
  118. cancelBtn.isHidden = true
  119. confirmBtn.isHidden = true
  120. xBtn.isHidden = false
  121. }
  122. func showSuccess(model:TSGenmojiModel){
  123. generateInView.isHidden = true
  124. generateInView.isRotating = false
  125. submitBtn.isHidden = true
  126. cancelBtn.isHidden = false
  127. confirmBtn.isHidden = false
  128. xBtn.isHidden = false
  129. imageModel = model
  130. //请求成功,则加载和保存图片
  131. self.netWorkImageView.setAsyncImage(urlString: model.response.resultUrl)
  132. }
  133. }