OtherPersonalCenterViewController.swift 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. //
  2. // OtherPersonalCenterViewController.swift
  3. // RainbowPlanet
  4. //
  5. // Created by 南鑫林 on 2019/6/17.
  6. // Copyright © 2019 RainbowPlanet. All rights reserved.
  7. //
  8. import UIKit
  9. import JXSegmentedView
  10. import RxSwift
  11. import SwiftyMediator
  12. import Kingfisher
  13. class OtherPersonalCenterViewController: BaseViewController {
  14. deinit {
  15. NXLLog("deinit")
  16. }
  17. override func didReceiveMemoryWarning() {
  18. super.didReceiveMemoryWarning()
  19. //KingfisherManager.shared.cache.clearDiskCache()
  20. KingfisherManager.shared.cache.clearMemoryCache()
  21. }
  22. let JXTableHeaderViewHeight: Int = Int(140 + kNavBarTotalHeight)
  23. let JXheightForHeaderInSection: Int = 44
  24. var cmsTemplateTitles = ["发布 0", "收藏 0", "分享 0"]
  25. var otherPersonalCenterVCType : Int = 0
  26. var uid : Int = 0
  27. var userDetailModel : UserDetailModel?
  28. override func viewDidLoad() {
  29. super.viewDidLoad()
  30. setupViews()
  31. setupLayouts()
  32. setupData()
  33. }
  34. override func setupViews() {
  35. otherHeaderContainerView.addSubview(otherHeaderView)
  36. view.addSubview(segmentedView)
  37. view.addSubview(pagingView)
  38. view.insertSubview(navigationBar, aboveSubview: pagingView)
  39. setnavigationBar()
  40. }
  41. /// 设置navigationBar
  42. func setnavigationBar() {
  43. navigationBar.wr_setLeftButton(image: kImage(name: "navbar_back_white")!)
  44. navigationBar.wr_setRightButton(image: kImage(name: "navbar_edit")!)
  45. navigationBar.addSubview(navigationBgView)
  46. navigationBar.addSubview(avatarButton)
  47. navigationBar.addSubview(nameButton)
  48. navigationBar.insertSubview(navigationBgView, aboveSubview: navigationBar.backgroundImageView)
  49. navigationBar.backgroundImageView.frame = CGRect(x: 0, y: 0, width: kScreenWidth, height: kScreenWidth)
  50. navigationBar.backgroundImageView.contentMode = .scaleAspectFill
  51. navigationBar.layer.masksToBounds = true
  52. // 设置导航栏显示图片
  53. navigationBar.barBackgroundImage = UIImage(named: "default_pic")
  54. // 设置初始导航栏透明度
  55. navigationBar.wr_setBackgroundAlpha(alpha: 0)
  56. // 设置状态栏style
  57. statusBarStyle = .lightContent
  58. }
  59. override func setupLayouts() {
  60. navigationBgView.snp.makeConstraints { (make) in
  61. make.edges.equalToSuperview()
  62. }
  63. avatarButton.snp.makeConstraints { (make) in
  64. make.left.equalTo(navigationBar.leftButton.snp.right)
  65. make.size.equalTo(20)
  66. make.centerY.equalTo(navigationBar.rightButton)
  67. }
  68. nameButton.snp.makeConstraints { (make) in
  69. make.centerY.equalTo(avatarButton)
  70. make.left.equalTo(avatarButton.snp.right).offset(4)
  71. }
  72. }
  73. override func setupData() {
  74. reloadData()
  75. userMemberDetailApi()
  76. navigationBar.onClickRightButton = {
  77. [weak self] in
  78. OtherPersonalCenterReportView.otherPersonalCenterReportView(uid: self?.uid ?? 0)
  79. }
  80. }
  81. /// 刷新页面
  82. func reloadData() {
  83. segmentedDataSource.titles = cmsTemplateTitles
  84. segmentedView.indicators = [indicator]
  85. self.segmentedDataSource.reloadData(selectedIndex: otherPersonalCenterVCType)
  86. self.segmentedView.defaultSelectedIndex = otherPersonalCenterVCType
  87. self.segmentedView.reloadData()
  88. self.pagingView.reloadData()
  89. }
  90. lazy var avatarButton: UIButton = {
  91. let avatarButton = UIButton(type: UIButton.ButtonType.custom)
  92. avatarButton.setImage(kImage(name: "default_avatar"), for: UIControl.State.normal)
  93. avatarButton.cornerRadius = 10
  94. avatarButton.masksToBounds = true
  95. avatarButton.alpha = 0
  96. return avatarButton
  97. }()
  98. lazy var nameButton: UIButton = {
  99. let nameButton = UIButton(type: UIButton.ButtonType.custom)
  100. nameButton.setTitle("昵称", for: UIControl.State.normal)
  101. nameButton.setTitleColor(kffffffColor, for: UIControl.State.normal)
  102. nameButton.titleLabel?.font = kBoldFont18
  103. nameButton.alpha = 0
  104. return nameButton
  105. }()
  106. private lazy var navigationBgView: UIView = {
  107. let navigationBgView = UIView()
  108. navigationBgView.backgroundColor = UIColor(hexString: "000000", alpha: 0.5)
  109. navigationBgView.alpha = 0
  110. return navigationBgView
  111. }()
  112. //1.初始化JXSegmentedView
  113. lazy var segmentedView: JXSegmentedView = {
  114. let segmentedView = JXSegmentedView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: CGFloat(JXheightForHeaderInSection)))
  115. segmentedView.delegate = self
  116. segmentedView.dataSource = segmentedDataSource
  117. segmentedView.contentScrollView = pagingView.listContainerView.collectionView
  118. return segmentedView
  119. }()
  120. //2.初始化dataSource
  121. lazy var segmentedDataSource: JXSegmentedTitleDataSource = {
  122. let segmentedDataSource = JXSegmentedTitleDataSource()
  123. segmentedDataSource.isTitleColorGradientEnabled = true
  124. segmentedDataSource.isItemSpacingAverageEnabled = true
  125. segmentedDataSource.isTitleZoomEnabled = true
  126. segmentedDataSource.titleNormalColor = k999999Color
  127. segmentedDataSource.titleSelectedColor = k333333Color
  128. segmentedDataSource.titleNormalFont = kRegularFont14!
  129. segmentedDataSource.titleSelectedFont = kBoldFont16
  130. //reloadData(selectedIndex:)方法一定要调用,方法内部会刷新数据源数组
  131. segmentedDataSource.reloadData(selectedIndex: 0)
  132. return segmentedDataSource
  133. }()
  134. //3.初始化指示器indicator
  135. lazy var indicator: JXSegmentedIndicatorLineView = {
  136. let indicator = JXSegmentedIndicatorLineView()
  137. indicator.indicatorColor = k333333Color
  138. indicator.indicatorHeight = 4
  139. indicator.indicatorWidth = 22
  140. return indicator
  141. }()
  142. //4.pagingView
  143. lazy var pagingView: JXPagingView = {
  144. let pagingView = JXPagingView(delegate: self)
  145. pagingView.frame = self.view.frame
  146. return pagingView
  147. }()
  148. // 5.头部headerView
  149. lazy var otherHeaderContainerView: UIView = {
  150. let otherHeaderContainerView = UIView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: CGFloat(JXTableHeaderViewHeight)))
  151. return otherHeaderContainerView
  152. }()
  153. /// 6.包含头部
  154. lazy var otherHeaderView: OtherPersonalCenterHeaderView = {
  155. var otherHeaderView = OtherPersonalCenterHeaderView(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: CGFloat(JXTableHeaderViewHeight)))
  156. return otherHeaderView
  157. }()
  158. override func viewDidLayoutSubviews() {
  159. super.viewDidLayoutSubviews()
  160. pagingView.frame = CGRect(x: 0, y: 0, width: kScreenWidth, height: kScreenHeight)
  161. }
  162. }
  163. extension OtherPersonalCenterViewController {
  164. /// 获取用户详情
  165. func userMemberDetailApi() {
  166. SwiftMoyaNetWorkServiceUser.shared().userMemberDetailApi(uid: uid ) {
  167. [weak self] (userDetailModel) -> (Void) in
  168. self?.userDetailModel = userDetailModel as? UserDetailModel
  169. self?.otherHeaderView.userDetailModel = self?.userDetailModel
  170. self?.navigationBar.backgroundImageView.kf.setImage(with: kURLImage(name: self?.userDetailModel?.backgroundImg ?? "default_pic"), placeholder: kImage(name: "default_pic"))
  171. self?.avatarButton.kf.setImage(with: kURLImage(name: self?.userDetailModel?.avatar ?? ""), for: UIControl.State.normal, placeholder: kImage(name: "default_avatar"))
  172. //KingfisherManager.shared.cache.clearMemoryCache()
  173. self?.nameButton.setTitle(self?.userDetailModel?.username, for: UIControl.State.normal)
  174. self?.cmsTemplateTitles = ["发布 \(self?.userDetailModel?.postCount ?? "0")","收藏 \(self?.userDetailModel?.collectCount ?? "0")","分享 \(self?.userDetailModel?.shareCount ?? "0")"]
  175. self?.reloadData()
  176. }
  177. }
  178. }
  179. extension OtherPersonalCenterViewController : JXSegmentedViewDelegate {
  180. //点击选中或者滚动选中都会调用该方法。适用于只关心选中事件,而不关心具体是点击还是滚动选中的情况。
  181. func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {
  182. self.otherPersonalCenterVCType = index
  183. }
  184. // 点击选中的情况才会调用该方法
  185. func segmentedView(_ segmentedView: JXSegmentedView, didClickSelectedItemAt index: Int) {
  186. }
  187. // 滚动选中的情况才会调用该方法
  188. func segmentedView(_ segmentedView: JXSegmentedView, didScrollSelectedItemAt index: Int) {
  189. }
  190. // 正在滚动中的回调
  191. func segmentedView(_ segmentedView: JXSegmentedView, scrollingFrom leftIndex: Int, to rightIndex: Int, percent: CGFloat) {
  192. }
  193. /// 是否允许点击选中目标index的item
  194. func segmentedView(_ segmentedView: JXSegmentedView, canClickItemAt index: Int) -> Bool {
  195. return true
  196. }
  197. }
  198. extension OtherPersonalCenterViewController: JXPagingViewDelegate {
  199. func tableHeaderViewHeight(in pagingView: JXPagingView) -> Int {
  200. return JXTableHeaderViewHeight
  201. }
  202. func tableHeaderView(in pagingView: JXPagingView) -> UIView {
  203. return otherHeaderContainerView
  204. }
  205. func heightForPinSectionHeader(in pagingView: JXPagingView) -> Int {
  206. return JXheightForHeaderInSection
  207. }
  208. func viewForPinSectionHeader(in pagingView: JXPagingView) -> UIView {
  209. pagingView.pinSectionHeaderVerticalOffset = kNavBarTotalHeight
  210. return segmentedView
  211. }
  212. func numberOfLists(in pagingView: JXPagingView) -> Int {
  213. return cmsTemplateTitles.count
  214. }
  215. func pagingView(_ pagingView: JXPagingView, initListAtIndex index: Int) -> JXPagingViewListViewDelegate {
  216. let list = PersonViewUserAndOtherListView()
  217. list.jumpModeType = .push
  218. list.uid = uid
  219. list.personalCenterVCType = index
  220. otherPersonalCenterVCType = index
  221. return list
  222. }
  223. func mainTableViewDidScroll(_ scrollView: UIScrollView) {
  224. otherHeaderView.personViewUserAndOtherHeaderView.scrollViewDidScroll(contentOffsetY: scrollView.contentOffset.y)
  225. let offsetY = scrollView.contentOffset.y
  226. if (offsetY > kSafeStatusBarHeight) {
  227. let alpha = (offsetY - kSafeStatusBarHeight) / CGFloat(kNavBarTotalHeight)
  228. navigationBar.wr_setBackgroundAlpha(alpha: alpha)
  229. avatarButton.alpha = alpha
  230. nameButton.alpha = alpha
  231. navigationBgView.alpha = alpha
  232. otherHeaderView.alpha = 1 - alpha
  233. } else {
  234. navigationBar.wr_setBackgroundAlpha(alpha: 0)
  235. avatarButton.alpha = 0
  236. nameButton.alpha = 0
  237. navigationBgView.alpha = 0
  238. otherHeaderView.alpha = 1
  239. }
  240. }
  241. }