TSPTPUploadImageVC+View.swift 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. //
  2. // TSPTPUploadImageVC+View.swift
  3. // AIEmoji
  4. //
  5. // Created by 100Years on 2025/6/24.
  6. //
  7. extension TSPTPUploadImageVC {
  8. func creatUploadView() -> TSUploadImageView {
  9. let uploadImageView = TSUploadImageView()
  10. uploadImageView.clickBgViewBlock = { [weak self] in
  11. guard let self = self else { return }
  12. pickSinglePhoto()
  13. }
  14. uploadImageView.clickDeleteBlock = { [weak self] in
  15. guard let self = self else { return }
  16. viewModel.upLoadImage = nil
  17. }
  18. return uploadImageView
  19. }
  20. func creatSelectStyleVC() -> TSGennertatorStyleVC {
  21. let selectStyleVC = TSGennertatorStyleVC()
  22. selectStyleVC.currentIndexPath = IndexPath(item: viewModel.selectedStyleIndex, section: 0)
  23. selectStyleVC.dataArray = viewModel.ptpStyleModels
  24. selectStyleVC.selectedValueBlock = { [weak self] indexPath, model in
  25. guard let self = self else { return }
  26. viewModel.selectedPTPStyleModel = model
  27. viewModel.selectedStyleIndex = indexPath.item
  28. setNavTitle(title: model.imageText.localized)
  29. selectStyleVideoHandle()
  30. }
  31. selectStyleVC.scrollHandle = { [weak self] scroll in
  32. guard let self = self else { return }
  33. creatBtnView.isHidden = scroll
  34. }
  35. return selectStyleVC
  36. }
  37. func creatCreatBtnView() -> TSAppBtnView {
  38. let creatBtnView = TSAppBtnView()
  39. let vipFreeNumType = viewModel.style.vipFreeNumType
  40. creatBtnView.setUpButton(style: .generate, vipFreeNumType: vipFreeNumType) { [weak self] in
  41. guard let self = self else { return }
  42. generateImage()
  43. }
  44. creatBtnView.setBtnEnabled(isEnabled: false)
  45. creatBtnView.isIconVipBlock = { [weak self] in
  46. guard let self = self else { return false }
  47. var showVip = kPurchaseDefault.generateVipShow(type: vipFreeNumType)
  48. if showVip == false,vipFreeNumType == .videoV2 {//只对视频做模型 vip 判断
  49. showVip = self.viewModel.selectedPTPStyleModel.isVip
  50. }
  51. return showVip
  52. }
  53. creatBtnView.isClickVipBlock = { [weak self] in
  54. guard let self = self else { return false }
  55. var isVip = kPurchaseDefault.freeNumAvailable(type: vipFreeNumType)
  56. if isVip == false,vipFreeNumType == .videoV2 {//只对视频做模型 vip 判断
  57. isVip = self.viewModel.selectedPTPStyleModel.isVip
  58. }
  59. return isVip
  60. }
  61. return creatBtnView
  62. }
  63. }
  64. extension TSPTPUploadImageVC {
  65. @objc func vipInfoChanged() {
  66. kExecuteOnMainThread {
  67. self.updateVipView()
  68. }
  69. }
  70. @objc func updateVipView() {
  71. kExecuteOnMainThread {
  72. self.creatBtnView.updateVipView()
  73. }
  74. }
  75. func getVipText() -> String {
  76. return "Generate".localized
  77. }
  78. func setCreatBtnEnabled() {
  79. let isAvailability = TSGeneratePTPOperationQueue.shared.isAvailability
  80. if viewModel.isCanGennerate, isAvailability {
  81. creatBtnView.setBtnEnabled(isEnabled: true)
  82. creatBtnView.loading = false
  83. dePrint("TSTextGeneralPicVC setCreatBtnEnabled false")
  84. } else {
  85. dePrint("TSTextGeneralPicVC setCreatBtnEnabled = \(isAvailability)")
  86. creatBtnView.setBtnEnabled(isEnabled: false)
  87. creatBtnView.loading = !isAvailability
  88. }
  89. updateVipView()
  90. }
  91. }
  92. extension TSPTPUploadImageVC {
  93. var isVideo:Bool{
  94. return viewModel.style.isVideo
  95. }
  96. func addVideoPlayLogic(){
  97. if isVideo{
  98. kMainAsync {
  99. self.uploadView.addVideoPlayLogic()
  100. self.uploadView.uploadVideoView.setVideoName(name: self.itemModel.imageNamed)
  101. self.uploadView.upLoadImage = self.uploadView.upLoadImage
  102. }
  103. }
  104. }
  105. func selectStyleVideoHandle() {
  106. if isVideo{
  107. let discoverVM:TSDiscoverViewModel = TSDiscoverViewModel()
  108. var array:[TSDiscoverItemModel] = discoverVM.bannerItems + discoverVM.videoEffectItems + discoverVM.aiDanceItems + discoverVM.creativeEffectItems
  109. let model2 = array.first(where: { discoverItemModel in
  110. return discoverItemModel.generateModel?.imageText == viewModel.selectedPTPStyleModel.imageText
  111. })
  112. if let discoverItemModel = model2,
  113. let animationItemVM = discoverItemModel.viewModel as? TSDiscoverAnimationItemVM,
  114. let imageNamed = animationItemVM.imageNameds.first{
  115. self.uploadView.uploadVideoView.setVideoName(name: imageNamed)
  116. if viewModel.upLoadImage == nil {
  117. self.uploadView.uploadVideoView.play()
  118. self.uploadView.uploadVideoView.touchButton.isSelected = true
  119. }
  120. }
  121. }
  122. }
  123. func judgeVideoImagesizeError(image:UIImage)->Bool{
  124. if isVideo,Self.judgeoImageSizeError(generateModel: viewModel.selectedPTPStyleModel, image: image){
  125. TSCustomAlertController.show(in: self, config: TSCustomAlertController.AlertConfig(
  126. message: "Invalid aspect ratio. Must be 1:2 to 1:1.2".localized,
  127. cancelTitle: "Got it".localized,
  128. cancelColor: .white,
  129. confirmTitle: ""
  130. ))
  131. return true
  132. }
  133. return false
  134. }
  135. //判断图片的尺寸是否错误
  136. static func judgeoImageSizeError(generateModel:TSGenerateModel,image:UIImage)->Bool{
  137. let discoverVM:TSDiscoverViewModel = TSDiscoverViewModel()
  138. if generateModel.imageText == discoverVM.video_Subject3.safeString(forKey: "imageText") ||
  139. generateModel.imageText == discoverVM.video_PUBGWinnerHit.safeString(forKey: "imageText") ||
  140. generateModel.imageText == discoverVM.video_MotorDance.safeString(forKey: "imageText")
  141. {
  142. let size = image.size
  143. if size.width/size.height < 0.5 || size.width/size.height > 0.83 {
  144. return true
  145. }
  146. }
  147. return false
  148. }
  149. }