CommunityBannerTableViewCell.swift 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. //
  2. // CommunityBannerTableViewCell.swift
  3. // RainbowPlanet
  4. //
  5. // Created by 南鑫林 on 2019/6/16.
  6. // Copyright © 2019 RainbowPlanet. All rights reserved.
  7. //
  8. import UIKit
  9. import FSPagerView
  10. import SwiftyMediator
  11. class CommunityBannerTableViewCell: UITableViewCell {
  12. class func cellWith(tableView:UITableView,indexPath:IndexPath) -> CommunityBannerTableViewCell {
  13. let ID = "CommunityBannerTableViewCell"
  14. tableView.register(CommunityBannerTableViewCell.self, forCellReuseIdentifier: ID)
  15. let cell : CommunityBannerTableViewCell = tableView.dequeueReusableCell(withIdentifier: ID, for: indexPath) as! CommunityBannerTableViewCell
  16. cell.indexPath = indexPath
  17. return cell
  18. }
  19. override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
  20. super.init(style: style, reuseIdentifier: reuseIdentifier)
  21. setupViews()
  22. setupLayouts()
  23. }
  24. required init?(coder aDecoder: NSCoder) {
  25. fatalError("init(coder:) has not been implemented")
  26. }
  27. var indexPath: IndexPath? {
  28. didSet {
  29. }
  30. }
  31. //MRAK: - 设置View
  32. private func setupViews() {
  33. self.selectionStyle = .none
  34. backgroundColor = kf7f8faColor
  35. addSubview(pagerView)
  36. addSubview(pageControl)
  37. }
  38. private func setupLayouts() {
  39. pagerView.snp.makeConstraints { (make) in
  40. make.edges.equalToSuperview()
  41. }
  42. }
  43. private lazy var pagerView: FSPagerView = {
  44. let pagerView = FSPagerView(frame: CGRect.zero)
  45. pagerView.backgroundColor = kf7f8faColor
  46. pagerView.delegate = self
  47. pagerView.dataSource = self
  48. pagerView.scrollDirection = .horizontal
  49. return pagerView
  50. }()
  51. private lazy var pageControl: NXLPageControl = {
  52. let pageControl = NXLPageControl()
  53. pageControl.pointSize = CGSize.init(width: kScaleValue(value: 5), height: 5)
  54. pageControl.currentWidthMultiple = 1//当前点的宽度为其他点的4倍
  55. pageControl.localPointSpace = 5
  56. pageControl.currentColor = kThemeColor
  57. pageControl.otherColor = UIColor(white: 0, alpha: 0.2)
  58. pageControl.clickPoint { [weak self] (index) in
  59. }
  60. return pageControl
  61. }()
  62. var communityRecommendTypeDataModels: Array<CommunityRecommendTypeDataModel>? {
  63. didSet {
  64. let pageControlSizeWidth = CGFloat(CGFloat(communityRecommendTypeDataModels?.count ?? 0) * kScaleValue(value: 5))
  65. let pageControlSpacingWidth = CGFloat(CGFloat((communityRecommendTypeDataModels?.count ?? 0) - 1) * kScaleValue(value: 5))
  66. let pageControlWidth = pageControlSizeWidth + pageControlSpacingWidth
  67. pageControl.snp.remakeConstraints { (make) in
  68. make.bottom.equalTo(-10)
  69. make.height.equalTo(5)
  70. make.centerX.equalToSuperview()
  71. make.width.equalTo(pageControlWidth)
  72. }
  73. pageControl.numberOfPages = (communityRecommendTypeDataModels?.count ?? 0)
  74. if pageControl.numberOfPages > 1 {
  75. pageControl.isHidden = false
  76. pagerView.automaticSlidingInterval = 5.0
  77. pagerView.isInfinite = true
  78. }else {
  79. pageControl.isHidden = true
  80. pagerView.automaticSlidingInterval = 0.0
  81. pagerView.isInfinite = false
  82. }
  83. }
  84. }
  85. }
  86. extension CommunityBannerTableViewCell:FSPagerViewDataSource,FSPagerViewDelegate {
  87. func numberOfItems(in pagerView: FSPagerView) -> Int {
  88. return communityRecommendTypeDataModels?.isEmpty ?? true ? 0 : communityRecommendTypeDataModels?.count ?? 0
  89. }
  90. func pagerView(_ pagerView: FSPagerView, cellForItemAt index: Int) -> FSPagerViewCell {
  91. let cell = CommunityBannerFSPagerViewCell.cellWith(collectionView: pagerView, index: index)
  92. cell.communityRecommendTypeDataModel = communityRecommendTypeDataModels?[index]
  93. return cell
  94. }
  95. func pagerView(_ pagerView: FSPagerView, didSelectItemAt index: Int) {
  96. pagerView.deselectItem(at: index, animated: true)
  97. let communityRecommendTypeDataModel = communityRecommendTypeDataModels?[index]
  98. let communityBannerType = CommunityBannerType(rawValue: communityRecommendTypeDataModel?.type ?? 0)
  99. switch communityBannerType {
  100. case .none?:
  101. break
  102. case .content?: //内容
  103. let postType = PostType(rawValue: communityRecommendTypeDataModel?.postType ?? "image")
  104. switch postType {
  105. case .image?,.html?:
  106. Mediator.push(CommunityRouterModuleType.pushPostDetailContent(postId: "\(communityRecommendTypeDataModel?.linkContentId ?? 0)"))
  107. break
  108. case .video?:
  109. Mediator.push(CommunityRouterModuleType.pushPostDetailVoide(postId: "\(communityRecommendTypeDataModel?.linkContentId ?? 0)", departType: DepartureVCType.personal, topicId: 0))
  110. break
  111. default:
  112. break
  113. }
  114. break
  115. case .user?: //个人中心
  116. if communityRecommendTypeDataModel?.linkContentId ?? 0 != UserModel.shared().getModel()?.uid {
  117. if communityRecommendTypeDataModel?.linkContentId ?? 0 != UserModel.shared().getModel()?.uid {
  118. Mediator.push(MineRouterModuleType.pushOtherPersonalCenter(uid: communityRecommendTypeDataModel?.linkContentId ?? 0))
  119. }
  120. }
  121. break
  122. case .activity?: //活动
  123. Mediator.push(H5RouterModuleType.pushActivityId(id: "\(communityRecommendTypeDataModel?.linkContentId ?? 0)"))
  124. break
  125. case .topic?: //话题
  126. Mediator.push(CommunityRouterModuleType.pushFeaturedTopics(id: communityRecommendTypeDataModel?.linkContentId ?? 0))
  127. break
  128. default:
  129. break
  130. }
  131. }
  132. func pagerViewWillEndDragging(_ pagerView: FSPagerView, targetIndex: Int) {
  133. self.pageControl.currentPage = targetIndex
  134. }
  135. func pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView) {
  136. self.pageControl.currentPage = pagerView.currentIndex
  137. }
  138. }