ASRTRStyleView.swift 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. //
  2. // ASRTRStyleView.swift
  3. // AIPlayRingtones
  4. //
  5. // Created by mini on 2025/5/19.
  6. //
  7. class ASRTRStyleView: TSBaseView {
  8. var selectedCompleted:((ASGenerateStyleModel,Int)->Void)?
  9. //选择生成类类型组
  10. var generateStyleIndex:Int = 0{
  11. didSet{
  12. if generateStyleModels.count <= 0 { return }
  13. DispatchQueue.main.async {
  14. self.colView.collectionView.selectItem(at: IndexPath(item: self.generateStyleIndex, section: 0), animated: true, scrollPosition: .centeredVertically)
  15. }
  16. }
  17. }
  18. var generateStyleModels:[ASGenerateStyleModel] = []
  19. {
  20. didSet{
  21. colView.reload(with: [TSSimpleSectionData(items: generateStyleModels)])
  22. self.generateStyleIndex = abs(generateStyleIndex)
  23. }
  24. }
  25. var generateStyleModel:ASGenerateStyleModel?{
  26. didSet{
  27. if let generateStyleModel = generateStyleModel {
  28. selectedCompleted?(generateStyleModel,generateStyleIndex)
  29. }
  30. }
  31. }
  32. private var collectionViewObserver: TSCollectionViewObserver!
  33. lazy var colView: TSSimpleCollectionView = {
  34. let identifier = "ASRTRStyleViewCell"
  35. let layout = UICollectionViewFlowLayout()
  36. let cp = TSSimpleCollectionView()
  37. cp.collectionView.isScrollEnabled = false
  38. cp.layout.minimumLineSpacing = 16
  39. cp.layout.minimumInteritemSpacing = 8
  40. cp.layout.scrollDirection = .vertical
  41. cp.delegate = self
  42. let contentInset = UIEdgeInsets(top: 0, left: 16, bottom: 0, right: 16)
  43. cp.collectionView.contentInset = contentInset
  44. cp.layout.itemSize = kGetCollectionViewCellSize(sectionInset: contentInset, itemSpacing: 16, originalSize: CGSize(width: 80, height: 104), cellRowNum: 4)
  45. cp.registerCell(ASRTRStyleViewCell.self,identifier:identifier)
  46. cp.cellIdentifierForItem = { data in
  47. return identifier
  48. }
  49. return cp
  50. }()
  51. override func creatUI() {
  52. contentView.addSubview(colView)
  53. colView.snp.makeConstraints { make in
  54. make.edges.equalToSuperview()
  55. make.height.equalTo(0)
  56. }
  57. }
  58. override func dealThings() {
  59. // 监听collectionView 的 contentSize
  60. collectionViewObserver = TSCollectionViewObserver(collectionView: colView.collectionView)
  61. collectionViewObserver.onContentSizeChange = { [weak self] size in
  62. guard let self = self else { return }
  63. print("collectionViewObserver 内容大小变化: \(size)")
  64. self.colView.snp.updateConstraints { make in
  65. make.height.equalTo(size.height)
  66. }
  67. }
  68. }
  69. }
  70. extension ASRTRStyleView: TSSimpleCollectionViewDelegate {
  71. func collectionView(didTrigger event: TSSmalCoacopods.TSSimpleCellEvent) {
  72. switch event.action {
  73. case .tap:
  74. generateStyleIndex = event.indexPath.row
  75. if let model = generateStyleModels.safeObj(At: generateStyleIndex) {
  76. generateStyleModel = model
  77. }
  78. default:
  79. break
  80. }
  81. }
  82. }
  83. class ASRTRStyleViewCell: TSBaseCollectionCell ,TSSimpleConfigurableView {
  84. weak var delegate: (any TSSmalCoacopods.TSSimpleCollectionViewDelegate)?
  85. var indexPath: IndexPath = IndexPath(item: 0, section: 0)
  86. var data: Any? {
  87. didSet {
  88. if let model = data as? ASGenerateStyleModel {
  89. proImageView.isHidden = !model.vip
  90. textLab.text = model.imageText.localized
  91. imageView.image = UIImage(named: model.imageName)
  92. }
  93. }
  94. }
  95. override var isSelected: Bool{
  96. didSet{
  97. textLab.textColor = .white.withAlphaComponent( isSelected ? 1.0 : 0.7)
  98. boardImageView.isHidden = !isSelected
  99. }
  100. }
  101. lazy var boardImageView: UIImageView = {
  102. let boardImageView = UIImageView()//.createImageView(image: .ringTextSelectedBoard)
  103. boardImageView.isHidden = true
  104. DispatchQueue.main.async {
  105. boardImageView.addGradientBorder(colors: ["#FF96F5".uiColor,"#F4F1EA".uiColor,"#5F7CFF".uiColor],width: 1.5,radius:16*kDesignScale,startPoint: CGPoint(x: 0.5, y: 0),endPoint: CGPoint(x: 0.5, y: 1))
  106. }
  107. return boardImageView
  108. }()
  109. lazy var imageView: UIImageView = {
  110. let imageView = UIImageView()
  111. imageView.cornerRadius = 12
  112. return imageView
  113. }()
  114. lazy var proImageView:UIImageView = {
  115. let proImageView = UIImageView.createImageView(image: .PRO)
  116. return proImageView
  117. }()
  118. lazy var textLab: UILabel = {
  119. let textLab = UILabel.createLabel(font: .font(size:14,weight: .regular),textColor: .white.withAlphaComponent(0.6),textAlignment: .center)
  120. return textLab
  121. }()
  122. override func creatUI() {
  123. contentView.addSubview(boardImageView)
  124. boardImageView.snp.makeConstraints { make in
  125. make.width.height.equalTo(72.0*kDesignScale)
  126. make.top.equalTo(0)
  127. make.centerX.equalToSuperview()
  128. }
  129. contentView.addSubview(imageView)
  130. imageView.snp.makeConstraints { make in
  131. make.width.height.equalTo(64.0*kDesignScale)
  132. make.top.equalTo(4)
  133. make.centerX.equalToSuperview()
  134. }
  135. contentView.addSubview(textLab)
  136. textLab.snp.makeConstraints { make in
  137. make.top.equalTo(boardImageView.snp.bottom)
  138. make.leading.trailing.equalTo(0)
  139. make.bottom.equalTo(0)
  140. }
  141. imageView.addSubview(proImageView)
  142. proImageView.snp.makeConstraints { make in
  143. make.top.equalTo(6)
  144. make.trailing.equalTo(-8)
  145. make.width.equalTo(21)
  146. make.height.equalTo(10)
  147. }
  148. }
  149. }