TSEmojisVC.swift 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. //
  2. // TSEmojisVC.swift
  3. // AIEmoji
  4. //
  5. // Created by 100Years on 2025/1/15.
  6. //
  7. import JXSegmentedView
  8. import JXPagingView
  9. class TSEmojisVC: TSBaseVC {
  10. let viewModel = TSEmojisColViewModel()
  11. var tableHeaderViewHeight: Int = 0//150
  12. var headerInSectionHeight: Int = 50
  13. lazy var vipBtn: UIButton = {
  14. let vipBtn = UIButton.createButton(image: UIImage(named: "nav_vip")) { [weak self] in
  15. guard let self = self else { return }
  16. TSPurchaseVC.show(target: self) {
  17. }
  18. }
  19. return vipBtn
  20. }()
  21. lazy var navBarView: TSBaseNavContentBarView = {
  22. let navBarView = TSBaseNavContentBarView()
  23. let titleImageView = UIImageView.createImageView(imageName: "nav_title_emojis",contentMode: .scaleToFill)
  24. navBarView.barView.addSubview(titleImageView)
  25. titleImageView.snp.makeConstraints { make in
  26. make.centerY.equalToSuperview()
  27. make.leading.equalTo(16)
  28. }
  29. navBarView.barView.addSubview(vipBtn)
  30. vipBtn.snp.makeConstraints { make in
  31. make.centerY.equalToSuperview()
  32. make.trailing.equalTo(-16)
  33. make.width.height.equalTo(24)
  34. }
  35. return navBarView
  36. }()
  37. //头 view
  38. lazy var headerView: UIView = {
  39. let view = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: CGFloat(tableHeaderViewHeight)))
  40. let imageView = UIImageView.createImageView(imageName: "emojis_banner")
  41. imageView.isUserInteractionEnabled = true
  42. imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(clickBanner)))
  43. view.addSubview(imageView)
  44. imageView.snp.makeConstraints { make in
  45. make.center.equalToSuperview()
  46. make.width.equalTo(343*kDesignScale)
  47. make.height.equalTo(117*kDesignScale)
  48. }
  49. return view
  50. }()
  51. lazy var pagingView: JXPagingView = {
  52. //lazy var pagingView: JXPagingView = JXPagingListRefreshView(delegate: self) //整个刷新
  53. let pagingView = JXPagingListRefreshView(delegate: self) //list 刷新
  54. pagingView.mainTableView.backgroundColor = .clear
  55. pagingView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: k_ScreenHeight - k_Nav_Height - k_Height_safeAreaInsetsBottom() - CGFloat(headerInSectionHeight) + 10)
  56. pagingView.listContainerView.listCellBackgroundColor = .clear
  57. //扣边返回处理,下面的代码要加上
  58. pagingView.listContainerView.scrollView.panGestureRecognizer.require(toFail: self.navigationController!.interactivePopGestureRecognizer!)
  59. pagingView.mainTableView.panGestureRecognizer.require(toFail: self.navigationController!.interactivePopGestureRecognizer!)
  60. return pagingView
  61. }()
  62. lazy var segmentedDataSource: JXSegmentedTitleDataSource = {
  63. let dataSource = JXSegmentedTitleDataSource()
  64. dataSource.isTitleColorGradientEnabled = true
  65. dataSource.itemSpacing = 40
  66. dataSource.titles = viewModel.emojisTypes
  67. dataSource.titleNormalColor = .white
  68. dataSource.titleSelectedColor = .mainBg
  69. dataSource.titleNormalFont = .font(size: 16.0)
  70. return dataSource
  71. }()
  72. //配置指示器
  73. lazy var indicator: JXSegmentedIndicatorBackgroundView = {
  74. let indicator = JXSegmentedIndicatorBackgroundView()
  75. indicator.isIndicatorConvertToItemFrameEnabled = true
  76. indicator.indicatorHeight = 32
  77. indicator.indicatorColor = .white
  78. return indicator
  79. }()
  80. lazy var segmentedView: JXSegmentedView = {
  81. let segmentedView = JXSegmentedView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: CGFloat(headerInSectionHeight)))
  82. segmentedView.delegate = self
  83. segmentedView.indicators = [indicator]
  84. segmentedView.dataSource = segmentedDataSource
  85. segmentedView.backgroundColor = .clear
  86. segmentedView.contentEdgeInsetLeft = 26
  87. segmentedView.listContainer = pagingView.listContainerView
  88. return segmentedView
  89. }()
  90. override func createView() {
  91. edgesForExtendedLayout = []
  92. navBarContentView.addSubview(navBarView)
  93. navBarView.snp.makeConstraints { make in
  94. make.edges.equalToSuperview()
  95. }
  96. contentView.addSubview(segmentedView)
  97. contentView.addSubview(pagingView)
  98. }
  99. @objc func clickBanner() {
  100. let vc = TSGenmojiVC()
  101. vc.hidesBottomBarWhenPushed = true
  102. navigationController?.pushViewController(vc, animated: true)
  103. }
  104. override func dealThings() {
  105. vipBtn.isHidden = PurchaseManager.default.isVip
  106. NotificationCenter.default.addObserver(self, selector: #selector(vipInfoChanged), name: .kPurchaseDidChanged, object: nil)
  107. }
  108. @objc func vipInfoChanged() {
  109. kExecuteOnMainThread {
  110. self.vipBtn.isHidden = PurchaseManager.default.isVip
  111. }
  112. }
  113. }
  114. extension TSEmojisVC: JXPagingViewDelegate {
  115. func tableHeaderViewHeight(in pagingView: JXPagingView) -> Int {
  116. return tableHeaderViewHeight
  117. }
  118. func tableHeaderView(in pagingView: JXPagingView) -> UIView {
  119. return UIView() //headerView
  120. }
  121. func heightForPinSectionHeader(in pagingView: JXPagingView) -> Int {
  122. return headerInSectionHeight
  123. }
  124. func viewForPinSectionHeader(in pagingView: JXPagingView) -> UIView {
  125. return segmentedView
  126. }
  127. func numberOfLists(in pagingView: JXPagingView) -> Int {
  128. return viewModel.emojisTypes.count
  129. }
  130. func pagingView(_ pagingView: JXPagingView, initListAtIndex index: Int) -> JXPagingViewListViewDelegate {
  131. if let emojisType = viewModel.emojisTypes.safeObj(At: index) {
  132. return TSEmojisChildVC(emojisType: emojisType)
  133. }else{
  134. return TSEmojisChildVC(emojisType: "Universe🌍")
  135. }
  136. }
  137. }
  138. extension TSEmojisVC: JXSegmentedViewDelegate {
  139. func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {
  140. self.navigationController?.interactivePopGestureRecognizer?.isEnabled = (index == 0)
  141. }
  142. }
  143. //联动的关键代码
  144. extension JXPagingListContainerView: @retroactive JXSegmentedViewListContainer {}