TSAIUsedPhotoVC.swift 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. //
  2. // TSAIUsedPhotoVC.swift
  3. // TSLiveWallpaper
  4. //
  5. // Created by 100Years on 2025/7/23.
  6. //
  7. class TSAIUsedPhotoVC: TSBaseVC {
  8. var listImageKeylArray:[String] = []
  9. var isShowtips:Bool{
  10. set{
  11. UserDefaults.standard.set(newValue ? nil : "1", forKey: "TSAIUsedPhotoVCIsShowtips")
  12. UserDefaults.standard.synchronize()
  13. }
  14. get{
  15. return UserDefaults.standard.string(forKey: "TSAIUsedPhotoVCIsShowtips") == nil
  16. }
  17. }
  18. //###################################### 集合视图 ######################################
  19. let collectionViewBtootm:CGFloat = 80
  20. let identifier = "TSAIUsedPhotoVCCell"
  21. lazy var collectionView: UICollectionView = {
  22. let layout = UICollectionViewFlowLayout()
  23. layout.scrollDirection = .vertical
  24. let itemW = (k_ScreenWidth-32.0-13.0-2.0)/2.0
  25. let itemH = kGetScaleHeight(originalSize: CGSize(width: 165.0, height: 220.0), width: itemW)
  26. layout.itemSize = CGSize(width: itemW, height: itemH)
  27. layout.minimumInteritemSpacing = 13
  28. layout.minimumLineSpacing = 16
  29. layout.sectionInset = UIEdgeInsets(top: 10, left: 16, bottom: k_Height_TabBar+20, right: 16)
  30. let collectionView = TSBaseCollectionView(frame: .zero, collectionViewLayout: layout)
  31. collectionView.delegate = self
  32. collectionView.dataSource = self
  33. collectionView.register(TSAIUsedPhotoVCCell.self, forCellWithReuseIdentifier: identifier)
  34. return collectionView
  35. }()
  36. lazy var pageNullView: TSPageNullView = {
  37. let pageNullView = TSPageNullView()
  38. pageNullView.isHidden = true
  39. return pageNullView
  40. }()
  41. lazy var tipsView: UIView = {
  42. let tipsView = UIView()
  43. tipsView.backgroundColor = .white.withAlphaComponent(0.1)
  44. let imageView = UIImageView.createImageView(image:.tips)
  45. tipsView.addSubview(imageView)
  46. let lab = UILabel.createLabel(text: "Photos are stored on your device for a safer, smoother experience.".localized,font: .font(size: 14),textColor: .white.withAlphaComponent(0.7))
  47. tipsView.addSubview(lab)
  48. let closeBtn = TSUIExpandedTouchButton()
  49. closeBtn.setUpButton(image: .closeGary){ [weak self] in
  50. guard let self = self else { return }
  51. isShowtips = false
  52. setUpShowtips()
  53. }
  54. tipsView.addSubview(closeBtn)
  55. imageView.snp.makeConstraints { make in
  56. make.width.height.equalTo(16)
  57. make.leading.equalTo(8)
  58. make.top.equalTo(12)
  59. }
  60. lab.snp.makeConstraints { make in
  61. make.leading.equalTo(32)
  62. make.trailing.equalTo(-8)
  63. make.top.equalTo(12)
  64. make.bottom.equalTo(-12)
  65. }
  66. closeBtn.snp.makeConstraints { make in
  67. make.trailing.equalTo(-4)
  68. make.top.equalTo(4)
  69. make.width.height.equalTo(12)
  70. }
  71. return tipsView
  72. }()
  73. override func createView() {
  74. setNavBarViewHidden(true)
  75. contentView.addSubview(pageNullView)
  76. contentView.addSubview(collectionView)
  77. collectionView.snp.makeConstraints { make in
  78. make.top.bottom.leading.trailing.equalTo(0)
  79. }
  80. setUpShowtips()
  81. }
  82. override func dealThings() {
  83. updateDataView()
  84. NotificationCenter.default.addObserver(forName: .kPhotoPickerCompleted, object: nil, queue: .main) { [weak self] _ in
  85. self?.updateDataView()
  86. }
  87. }
  88. @objc func updateDataView(){
  89. listImageKeylArray = TSDBKeyManager.getAllKeyStringArray()
  90. updateView()
  91. }
  92. func updateView() {
  93. collectionView.reloadData()
  94. pageNullView.isHidden = listImageKeylArray.count > 0
  95. }
  96. override func viewWillAppear(_ animated: Bool) {
  97. super.viewWillAppear(animated)
  98. }
  99. func setUpShowtips(){
  100. if isShowtips,tipsView.superview == nil {
  101. contentView.addSubview(tipsView)
  102. tipsView.snp.remakeConstraints{ make in
  103. make.leading.equalTo(16)
  104. make.trailing.equalTo(-16)
  105. make.top.equalTo(16)
  106. }
  107. collectionView.snp.remakeConstraints{ make in
  108. make.top.equalTo(tipsView.snp.bottom)
  109. make.bottom.leading.trailing.equalTo(0)
  110. }
  111. }else{
  112. tipsView.removeFromSuperview()
  113. collectionView.snp.remakeConstraints{ make in
  114. make.top.bottom.leading.trailing.equalTo(0)
  115. }
  116. }
  117. }
  118. }
  119. extension TSAIUsedPhotoVC: UICollectionViewDataSource ,UICollectionViewDelegate {
  120. public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  121. return listImageKeylArray.count
  122. }
  123. public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
  124. let cell = collectionView.dequeueReusableCell(withReuseIdentifier: identifier, for: indexPath)
  125. if let cell = cell as? TSAIUsedPhotoVCCell ,let keyString = listImageKeylArray.safeObj(At:indexPath.row){
  126. cell.keyString = keyString
  127. cell.buttonTapped = { [weak self] cmd in
  128. self?.handelCellCmd(cmd: cmd,indexPath: indexPath)
  129. }
  130. }
  131. return cell
  132. }
  133. public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
  134. if let keyString = listImageKeylArray.safeObj(At:indexPath.row){
  135. // TSImageStoreTool.retrieveImage(urlString: keyString) { [weak self] image in
  136. // guard let self = self else { return }
  137. // guard let image = image else { return }
  138. if let image = TSUserdPhotoDiskTool.loadUserdPhotoImage(imageKey: keyString) {
  139. let itemModel = TSDiscoverItemModel(style: .colorize,viewModel: TSDiscoverAnimationItemVM(),generateModel: TSGenerateModel(json: TSAIListDataVM.shared.ptp_Colorize))
  140. let vc = TSAIUploadPhotoVC(titleString: "",upLoadImage: image, generatorStyle: .colorize,disCoverItemModel: itemModel,isUsedPhoto: true)
  141. vc.setDeleteComplete { [weak self] in
  142. guard let self = self else { return }
  143. if let imageKey = listImageKeylArray.safeObj(At: indexPath.item){
  144. removeKey(imageKey: imageKey)
  145. }
  146. }
  147. self.push(vc,animated: true)
  148. }
  149. }
  150. }
  151. }
  152. extension TSAIUsedPhotoVC{
  153. func handelCellCmd(cmd:String,indexPath: IndexPath){
  154. if let imageKey = listImageKeylArray.safeObj(At: indexPath.item){
  155. if cmd == "delete" {
  156. TSCustomAlertController.show(in: self, config: TSCustomAlertController.AlertConfig(
  157. message: "Are you sure to delete?".localized,
  158. cancelTitle: "Delete".localized,
  159. cancelColor: .red,
  160. confirmTitle: "Retain".localized,
  161. confirmColor: .white,
  162. cancelAction: { [weak self] in
  163. guard let self = self else { return }
  164. removeKey(imageKey: imageKey)
  165. }
  166. ))
  167. }
  168. }
  169. }
  170. func removeKey(imageKey:String){
  171. TSDBKeyManager.removeKey(imageKey)
  172. // TSImageStoreTool.removeImage(urlString: (imageKey))
  173. TSUserdPhotoDiskTool.removeImageKey(imageKey:imageKey)
  174. updateDataView()
  175. }
  176. }
  177. extension TSAIUsedPhotoVC:TSTabBarControllerProtocol {
  178. func tabBarDoubleTap(_ tabbar: UITabBarController){
  179. collectionView.setContentOffset(CGPoint(x: 0, y: 0), animated: true)
  180. }
  181. }
  182. import JXSegmentedView
  183. extension TSAIUsedPhotoVC: JXSegmentedListContainerViewListDelegate {
  184. func listView() -> UIView { return view }
  185. }
  186. class TSAIUsedPhotoVCCell: TSBaseCollectionCell {
  187. var buttonTapped:((String)->Void)?
  188. var operation:TSGenerateBasePhotoOperation?
  189. var keyString:String = String(){
  190. didSet {
  191. // TSImageStoreTool.retrieveImage(urlString: keyString) { [weak self] image in
  192. // guard let self = self else { return }
  193. // showImageView.image = image
  194. // }
  195. showImageView.image = TSUserdPhotoDiskTool.loadUserdPhotoImage(imageKey: keyString)
  196. }
  197. }
  198. lazy var showImageView: UIImageView = {
  199. let showImageView = UIImageView.createImageView(imageName:"",contentMode: .scaleAspectFill)
  200. showImageView.backgroundColor = .gray
  201. return showImageView
  202. }()
  203. @objc func handleLongPress(_ gestureRecognizer: UILongPressGestureRecognizer) {
  204. // 确保只在手势开始时触发一次
  205. guard gestureRecognizer.state == .began else { return }
  206. buttonTapped?("delete")
  207. }
  208. override func creatUI() {
  209. let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(_:)))
  210. longPressRecognizer.minimumPressDuration = 0.5 // 设置最小长按时间(秒)
  211. contentView.addGestureRecognizer(longPressRecognizer)
  212. contentView.layer.borderWidth = 3
  213. contentView.layer.borderColor = "#DFD7C0".uiCGColor
  214. contentView.addSubview(showImageView)
  215. showImageView.snp.makeConstraints { make in
  216. make.top.equalTo(0)
  217. make.leading.equalTo(0)
  218. make.trailing.bottom.equalTo(0)
  219. }
  220. }
  221. }