IHDashboardMainView.swift 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. //
  2. // IHDashboardMainView.swift
  3. // Inhealth
  4. //
  5. // Created by weclouds on 2019/12/10.
  6. // Copyright © 2019 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. import JXSegmentedView
  10. import JXPagingView
  11. class IHDashboardMainView: UIView {
  12. var gatwayListCallBack:(()->Void)?
  13. var cond_code:String?{
  14. didSet{
  15. headerView.cond_code = self.cond_code
  16. }
  17. }
  18. var cond_txt :String?{
  19. didSet{
  20. headerView.cond_txt = self.cond_txt
  21. }
  22. }
  23. var level:String?{
  24. didSet{
  25. headerView.level = self.level
  26. }
  27. }
  28. var averageAir:String?{
  29. didSet{
  30. headerView.averageAir = self.averageAir
  31. }
  32. }
  33. var envorentmentInfo:Home_room_env_status?{
  34. didSet{
  35. self.segmentedView.reloadData()
  36. }
  37. }
  38. var headerViewCallback : (()->Void)?
  39. var pagingView: JXPagingView!
  40. var userHeaderView: IHDashBoardHeaderView!
  41. var headerContainerView:UIView!
  42. var segmentedViewDataSource : JXSegmentedTitleDataSource!
  43. var segmentedView:JXSegmentedView!
  44. let titles = ["设备概览","环境指数","所有"]
  45. var tableViewHeaderViewHeight : Int = 220
  46. var heightForHeaderInSection:Int = 50
  47. var currentIndex: Int! = 0
  48. lazy var headerView: IHDashBoardHeaderView = {
  49. let headerView = IHDashBoardHeaderView(frame: CGRect(x: 0, y: 0, width: Int(KSCREENWIDTH), height: tableViewHeaderViewHeight))
  50. headerView.backgroundColor = .white
  51. return headerView
  52. }()
  53. override init(frame: CGRect) {
  54. super.init(frame: frame)
  55. headerContainerView = UIView(frame: CGRect(x: 0, y: 0, width: Int(KSCREENWIDTH), height: tableViewHeaderViewHeight))
  56. headerContainerView.addSubview(headerView)
  57. headerView.callback = {[unowned self] in
  58. if let headerViewCallback = self.headerViewCallback {
  59. headerViewCallback()
  60. }
  61. }
  62. //segmentViewDataSource一定要通过属性强持有
  63. //设置文字样式
  64. segmentedViewDataSource = JXSegmentedTitleDataSource()
  65. segmentedViewDataSource.titles = titles
  66. segmentedViewDataSource.titleSelectedColor = UIColor(hexString: "#333333")!
  67. segmentedViewDataSource.titleSelectedFont = UIFont(name: PingFangSC_Semibold, size: 16)
  68. segmentedViewDataSource.titleNormalColor = UIColor(hexString: "#C6CDD5")!
  69. segmentedViewDataSource.titleNormalFont = UIFont(name: PingFangSC_Semibold, size: 16)!
  70. segmentedViewDataSource.isTitleColorGradientEnabled = true
  71. segmentedViewDataSource.isTitleZoomEnabled = true
  72. //设置segmentView
  73. segmentedView = JXSegmentedView(frame: CGRect(x: 0, y: 0, width: KSCREENWIDTH, height: CGFloat(heightForHeaderInSection)))
  74. segmentedView.delegate = self
  75. segmentedView.backgroundColor = .white
  76. segmentedView.dataSource = segmentedViewDataSource
  77. segmentedView.isContentScrollViewClickTransitionAnimationEnabled = false
  78. //设置指示器
  79. let lineView = JXSegmentedIndicatorLineView()
  80. lineView.indicatorColor = UIColor(hexString: "#573F95")!
  81. lineView.indicatorWidth = 30
  82. segmentedView.indicators = [lineView]
  83. let lineWidth = 1/UIScreen.main.scale
  84. let lineLayer = CALayer()
  85. lineLayer.frame = CGRect(x: 0, y: segmentedView.bounds.height - lineWidth, width: segmentedView.bounds.width, height: lineWidth)
  86. segmentedView.layer.addSublayer(lineLayer)
  87. pagingView = JXPagingView(delegate: self)
  88. addSubview(pagingView)
  89. segmentedView.contentScrollView = pagingView.listContainerView.collectionView
  90. }
  91. func d_viewDidLauyouSubView() {
  92. pagingView.frame = self.bounds
  93. }
  94. required init?(coder: NSCoder) {
  95. fatalError("init(coder:) has not been implemented")
  96. }
  97. }
  98. extension IHDashboardMainView:JXPagingViewDelegate{
  99. func tableHeaderViewHeight(in pagingView: JXPagingView) -> Int {
  100. return tableViewHeaderViewHeight
  101. }
  102. func tableHeaderView(in pagingView: JXPagingView) -> UIView {
  103. return headerContainerView
  104. }
  105. func heightForPinSectionHeader(in pagingView: JXPagingView) -> Int {
  106. return heightForHeaderInSection
  107. }
  108. func viewForPinSectionHeader(in pagingView: JXPagingView) -> UIView {
  109. return segmentedView
  110. }
  111. func numberOfLists(in pagingView: JXPagingView) -> Int {
  112. return titles.count
  113. }
  114. func pagingView(_ pagingView: JXPagingView, initListAtIndex index: Int) -> JXPagingViewListViewDelegate {
  115. if index == 0 {
  116. let list = IHEquipmentView()
  117. list.gateWayCallback = self.gatwayListCallBack
  118. pagingView.mainTableView.isScrollEnabled = true
  119. return list
  120. }else if index == 1 {
  121. let list = IHAirQualityView()
  122. list.envorenmentInfo = self.envorentmentInfo
  123. pagingView.mainTableView.isScrollEnabled = true
  124. return list
  125. }else{
  126. let list = IHHotelView()
  127. pagingView.height = self.height
  128. pagingView.mainTableView.isScrollEnabled = true
  129. return list
  130. }
  131. }
  132. func mainTableViewDidScroll(_ scrollView: UIScrollView) {
  133. }
  134. }
  135. extension IHDashboardMainView:JXSegmentedViewDelegate{
  136. func segmentedView(_ segmentedView: JXSegmentedView, didSelectedItemAt index: Int) {
  137. if currentIndex == index {
  138. return
  139. }
  140. if index == 0 {
  141. pagingView.mainTableView.contentOffset = CGPoint(x: 0, y: 0) //恢复位置
  142. currentIndex = index
  143. }else if index == 1{
  144. pagingView.mainTableView.contentOffset = CGPoint(x: 0, y: 0) //恢复位置
  145. currentIndex = index
  146. }else{
  147. pagingView.mainTableView.contentOffset = CGPoint(x: 0, y: 0) //恢复位置
  148. currentIndex = index
  149. }
  150. }
  151. }