TSPTPBrowseVC.swift 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  1. //
  2. // TSPTPBrowseVC.swift
  3. // AIEmoji
  4. //
  5. // Created by 100Years on 2025/2/26.
  6. //
  7. private let cellId = "TSPTPBrowseCell"
  8. class TSPTPBrowseVC: TSBottomAlertVC {
  9. var dataModelArray = [TSGenmojiModel]()
  10. var currentImage:UIImage?{
  11. let cell = collectionView.cellForItem(at: IndexPath(item: currentIndex, section: 0)) as? TSPTPBrowseCell
  12. var image = cell?.netWorkImageView.image
  13. image = image?.pngImage
  14. return image
  15. }
  16. var currentModel:TSGenmojiModel?{
  17. if let model = dataModelArray.safeObj(At: currentIndex){
  18. return model
  19. }
  20. return nil
  21. }
  22. var currentIndex:Int = 0 {
  23. didSet{
  24. reloadUI()
  25. }
  26. }
  27. lazy var collectionView: UICollectionView = {
  28. let layout = UICollectionViewFlowLayout()
  29. layout.scrollDirection = .vertical
  30. let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
  31. collectionView.delegate = self
  32. collectionView.dataSource = self
  33. collectionView.showsVerticalScrollIndicator = false
  34. collectionView.showsHorizontalScrollIndicator = false
  35. collectionView.backgroundColor = .clear
  36. if #available(iOS 11.0, *) {
  37. collectionView.contentInsetAdjustmentBehavior = .never
  38. }
  39. collectionView.register(TSPTPBrowseCell.self, forCellWithReuseIdentifier: cellId)
  40. collectionView.isPagingEnabled = true
  41. collectionView.isHidden = true
  42. if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
  43. flowLayout.minimumInteritemSpacing = 0
  44. flowLayout.minimumLineSpacing = 0
  45. flowLayout.scrollDirection = .horizontal
  46. flowLayout.itemSize = CGSize(width: k_ScreenWidth, height: 490*kDesignScale)
  47. }
  48. return collectionView
  49. }()
  50. lazy var leftBtn: UIButton = {
  51. let leftBtn = UIButton.createButton(image: UIImage(named: "page_left")){ [weak self] in
  52. guard let self = self else { return }
  53. self.collectionView.scrollToItem(at: IndexPath(item: self.currentIndex-1, section: 0), at: .left, animated: true)
  54. }
  55. return leftBtn
  56. }()
  57. lazy var rightBtn: UIButton = {
  58. let rightBtn = UIButton.createButton(image: UIImage(named: "page_right")){ [weak self] in
  59. guard let self = self else { return }
  60. self.collectionView.scrollToItem(at: IndexPath(item: self.currentIndex+1, section: 0), at: .left, animated: true)
  61. }
  62. return rightBtn
  63. }()
  64. override func createView() {
  65. super.createView()
  66. submitBtn.isHidden = false
  67. submitBtn.setTitle("Save".localized, for: .normal)
  68. cancelBtn.isHidden = true
  69. confirmBtn.isHidden = true
  70. bottomView.frame = CGRectMake(0, 92, k_ScreenWidth, k_ScreenHeight-92)
  71. bottomView.addSubview(collectionView)
  72. collectionView.snp.makeConstraints { make in
  73. make.leading.trailing.equalTo(0)
  74. make.top.equalTo(36)
  75. make.bottom.equalTo(confirmBtn.snp.top).offset(-30)
  76. }
  77. bottomView.addSubview(leftBtn)
  78. leftBtn.snp.makeConstraints { make in
  79. make.leading.equalTo(17)
  80. make.top.equalTo(244)
  81. make.width.height.equalTo(40)
  82. }
  83. bottomView.addSubview(rightBtn)
  84. rightBtn.snp.makeConstraints { make in
  85. make.trailing.equalTo(-18)
  86. make.top.equalTo(244)
  87. make.width.height.equalTo(40)
  88. }
  89. kDelayMainShort {
  90. self.collectionView.isHidden = false
  91. self.collectionView.reloadData()
  92. self.collectionView.setContentOffset(CGPoint(x: CGFloat(self.currentIndex) * self.collectionView.frame.size.width, y: 0), animated: false)
  93. if let flowLayout = self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
  94. flowLayout.itemSize = self.collectionView.bounds.size
  95. }
  96. }
  97. }
  98. @objc override func clickSubmitBtn(){
  99. if JudgeVip(){
  100. return
  101. }
  102. if let image = currentImage{
  103. PhotoManagerShared.saveImageToAlbum(image) { success, error in
  104. if success {
  105. kSavePhotoSuccesswShared.show(atView: self.view)
  106. }else{
  107. debugPrint(error)
  108. }
  109. }
  110. }else{
  111. kShowToastDataMissing()
  112. }
  113. }
  114. func JudgeVip() -> Bool {
  115. return kJudgeVip(externalBool: currentModel?.response.vip ?? false , vc: self, closePageBlock: nil)
  116. }
  117. }
  118. extension TSPTPBrowseVC {
  119. func reloadUI() {
  120. //判断前后是否还有,以此来确定左右翻页按钮
  121. var isHiddenLeft = false
  122. var isHiddenRight = false
  123. if dataModelArray.count == 1{
  124. isHiddenLeft = true
  125. isHiddenRight = true
  126. }else if currentIndex == 0 {
  127. isHiddenLeft = true
  128. }else if currentIndex+1 >= dataModelArray.count {
  129. isHiddenRight = true
  130. }
  131. leftBtn.isHidden = isHiddenLeft
  132. rightBtn.isHidden = isHiddenRight
  133. }
  134. }
  135. //MARK: UICollectionViewDataSource
  136. extension TSPTPBrowseVC:UICollectionViewDataSource,UICollectionViewDelegate {
  137. func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
  138. resetIndexWithOffset(scrollView)
  139. }
  140. func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
  141. resetIndexWithOffset(scrollView)
  142. }
  143. private func resetIndexWithOffset(_ scrollView: UIScrollView) {
  144. let item = Int((scrollView.contentOffset.x / scrollView.bounds.width).rounded())
  145. currentIndex = item
  146. }
  147. func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  148. return dataModelArray.count
  149. }
  150. func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
  151. let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! TSPTPBrowseCell
  152. if let model = dataModelArray.safeObj(At: indexPath.item){
  153. if model.modelType == .example {
  154. // cell.exampleView.isHidden = false
  155. cell.netWorkImageView.image = UIImage(named:model.response.resultUrl)
  156. }else{
  157. // cell.exampleView.isHidden = true
  158. cell.netWorkImageView.setAsyncImage(urlString: model.response.resultUrl,placeholder: kPlaceholderImage,contentMode: .scaleAspectFit)
  159. }
  160. cell.vipImageView.isHidden = !model.response.vip
  161. cell.textLabel.text = model.request.promptSort
  162. }
  163. return cell
  164. }
  165. }
  166. class TSPTPBrowseCell : TSBaseCollectionCell{
  167. lazy var exampleView: UIView = {
  168. let exampleView = UIView()
  169. exampleView.backgroundColor = "#232323".uiColor.withAlphaComponent(0.3)
  170. let textLabel = UILabel.createLabel(
  171. text: "Example".localized,
  172. font: .font(size: 12),
  173. textColor: .white
  174. )
  175. exampleView.addSubview(textLabel)
  176. textLabel.snp.makeConstraints { make in
  177. make.top.edges.equalTo(UIEdgeInsets(top: 4, left: 6, bottom: 4, right: 6))
  178. }
  179. exampleView.isHidden = true
  180. return exampleView
  181. }()
  182. lazy var netWorkImageView : UIImageView = {
  183. let netWorkImageView = UIImageView.createImageView(imageName: "",contentMode: .scaleAspectFit,corner: 24.0)
  184. return netWorkImageView
  185. }()
  186. lazy var textLabel: UILabel = {
  187. let textLabel = UILabel.createLabel(
  188. font: .font(size: 12),
  189. textColor: .themeColor,
  190. numberOfLines: 0
  191. )
  192. return textLabel
  193. }()
  194. lazy var vipImageView: UIImageView = {
  195. let vipImageView = UIImageView.createImageView(imageName:"vip_side_icon")
  196. vipImageView.contentMode = .scaleToFill
  197. vipImageView.isHidden = true
  198. return vipImageView
  199. }()
  200. override func creatUI() {
  201. let w = k_ScreenWidth - 120
  202. let h = w/kTextWHScale
  203. bgContentView.addSubview(netWorkImageView)
  204. netWorkImageView.snp.makeConstraints { make in
  205. make.centerX.equalToSuperview()
  206. make.top.equalTo(0)
  207. make.width.equalTo(w)
  208. make.height.equalTo(h)
  209. }
  210. let labelBgView = UIView()
  211. labelBgView.backgroundColor = "#333333".uiColor
  212. labelBgView.cornerRadius = 16.0
  213. labelBgView.addSubview(textLabel)
  214. textLabel.snp.makeConstraints { make in
  215. make.top.leading.equalTo(12)
  216. make.trailing.bottom.equalTo(-12)
  217. }
  218. bgContentView.addSubview(labelBgView)
  219. labelBgView.snp.makeConstraints { make in
  220. make.top.equalTo(netWorkImageView.snp.bottom).offset(20)
  221. make.centerX.equalToSuperview()
  222. make.leading.greaterThanOrEqualTo(16)
  223. make.trailing.lessThanOrEqualTo(-16)
  224. make.bottom.lessThanOrEqualTo(0)
  225. }
  226. netWorkImageView.addSubview(vipImageView)
  227. vipImageView.snp.makeConstraints { make in
  228. make.width.height.equalTo(40)
  229. make.top.equalTo(-5)
  230. make.trailing.equalTo(5)
  231. }
  232. contentView.addSubview(exampleView)
  233. exampleView.snp.makeConstraints { make in
  234. make.top.equalTo(8)
  235. make.leading.equalTo(8)
  236. }
  237. }
  238. }