SBTHorizontalScreenVCtr.swift 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. //
  2. // SBTHorizontalScreenVCtr.swift
  3. // SolarBT
  4. //
  5. // Created by weclouds on 2019/3/13.
  6. // Copyright © 2019 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. class SBTHorizontalScreenVCtr: UIViewController {
  10. var arr0 : [Float]? = [Float]()
  11. var arr1 : [Float]? = [Float]()
  12. var arr2 : [Float]? = [Float]()
  13. var arr3 : [Float]? = [Float]()
  14. var arr4 : [Float]? = [Float]()
  15. var arr5 : [Float]? = [Float]()
  16. var weekData : [OneDayData]? {
  17. didSet{
  18. }
  19. }
  20. var dayArr :[String]?
  21. lazy var batteryChartView: DVBarChartView = {
  22. let chartView = DVBarChartView(frame: CGRect(x: 50, y: 0 , width: KSCREENHEIGHT - 100, height: KSCREENWIDTH - 50))
  23. chartView.barGap = 17
  24. chartView.barWidth = 33
  25. chartView.yAxisViewWidth = 50
  26. chartView.numberOfYAxisElements = 5
  27. chartView.xAxisTitleArray = self.dayArr
  28. chartView.backColor = UIColor.white
  29. chartView.axisColor = UIColor(hexString: "#E4E4E4")
  30. chartView.xValues = arr0 as? NSMutableArray
  31. chartView.xValues2 = arr1 as? NSMutableArray
  32. chartView.yAxisMaxValue = 7000 * 2;
  33. chartView.tag = 800000
  34. chartView.isHidden = true
  35. chartView.isLandspace = true
  36. chartView.draw()
  37. return chartView
  38. }()
  39. lazy var chargeChartView: DVBarChartView = {
  40. let chartView = DVBarChartView(frame: CGRect(x: 50, y: 0, width: KSCREENHEIGHT - 100, height: KSCREENWIDTH - 50))
  41. chartView.barGap = 17
  42. chartView.barWidth = 33
  43. chartView.yAxisViewWidth = 50
  44. chartView.numberOfYAxisElements = 5
  45. chartView.xAxisTitleArray = self.dayArr
  46. chartView.backColor = UIColor.white
  47. chartView.axisColor = UIColor(hexString: "#E4E4E4")
  48. chartView.tag = 800001
  49. chartView.yAxisMaxValue = 2500;
  50. chartView.isHidden = true
  51. chartView.isLandspace = true
  52. chartView.draw()
  53. return chartView
  54. }()
  55. lazy var dischargeChartView: DVBarChartView = {
  56. let chartView = DVBarChartView(frame: CGRect(x: 50, y: 0, width: KSCREENHEIGHT - 100, height: KSCREENWIDTH - 50))
  57. chartView.barGap = 17
  58. chartView.barWidth = 30
  59. chartView.yAxisViewWidth = 50
  60. chartView.numberOfYAxisElements = 5
  61. chartView.xAxisTitleArray = self.dayArr
  62. chartView.backColor = UIColor.white
  63. chartView.axisColor = UIColor(hexString: "#E4E4E4")
  64. chartView.tag = 800002
  65. chartView.yAxisMaxValue = 2500;
  66. chartView.isHidden = true
  67. chartView.isLandspace = true
  68. chartView.draw()
  69. return chartView
  70. }()
  71. lazy var toolbar: UIView = {
  72. let toolbar = UIView(frame: CGRect(x: 0, y: 0, width: 375, height: 30))
  73. toolbar.backgroundColor = UIColor.white
  74. toolbar.layer.masksToBounds = true
  75. toolbar.layer.cornerRadius = 15
  76. toolbar.layer.borderWidth = 1
  77. toolbar.layer.borderColor = UIColor(hexString: "#DEDEDE")?.cgColor
  78. return toolbar
  79. }()
  80. let btnTitles = ["Battery".da_localizedStr(),"Charge".da_localizedStr(),"Discharge".da_localizedStr()]
  81. let appdelegate = UIApplication.shared.delegate as! AppDelegate
  82. override func viewDidLoad() {
  83. super.viewDidLoad()
  84. appdelegate.blockRotation = true
  85. dayArr = [String]()
  86. let first = nowTime("yyyy-M-d")
  87. let second = getLastDay(first)
  88. let third = getLastDay(second)
  89. let foreth = getLastDay(third)
  90. let fifth = getLastDay(foreth)
  91. let sixth = getLastDay(fifth)
  92. let seventh = getLastDay(sixth)
  93. let eighth = getLastDay(seventh)
  94. dayArr?.append("Today".da_localizedStr())
  95. dayArr?.append("Yesterday".da_localizedStr())
  96. dayArr?.append(third.subString(start: 5))
  97. dayArr?.append(foreth.subString(start: 5))
  98. dayArr?.append(fifth.subString(start: 5))
  99. dayArr?.append(sixth.subString(start: 5))
  100. dayArr?.append(seventh.subString(start: 5))
  101. dayArr?.append(eighth.subString(start: 5))
  102. createUI()
  103. }
  104. override func viewWillAppear(_ animated: Bool) {
  105. // super.viewWillAppear(animated)
  106. //该页面显示时强制横屏
  107. let value = UIInterfaceOrientation.landscapeRight.rawValue
  108. UIDevice.current.setValue(value, forKey: "orientation")
  109. }
  110. @objc func notificationChangeToolButton() {
  111. for i in 0..<3 {
  112. let btn : UIButton = toolbar.viewWithTag((i + 8000)) as! UIButton
  113. btn.isSelected = false
  114. }
  115. let selectedIndex = AppShare.toolbarSelectedIndex
  116. let button : UIButton = toolbar.viewWithTag((selectedIndex! + 8000)) as! UIButton
  117. button.isSelected = true
  118. if selectedIndex == 0 {
  119. show(batteryChartView)
  120. }else if selectedIndex == 1 {
  121. show(chargeChartView)
  122. }else if selectedIndex == 2 {
  123. show(dischargeChartView)
  124. }
  125. }
  126. override func viewWillDisappear(_ animated: Bool) {
  127. // super.viewWillDisappear(animated)
  128. //页面退出时还原强制竖屏状态
  129. appdelegate.blockRotation = false
  130. let value = UIInterfaceOrientation.portrait.rawValue
  131. UIDevice.current.setValue(value, forKey: "orientation")
  132. }
  133. //横屏页面是否支持旋转
  134. override var shouldAutorotate: Bool{
  135. return false
  136. }
  137. //不隐藏状态栏
  138. override var prefersStatusBarHidden: Bool{
  139. return false
  140. }
  141. }
  142. extension SBTHorizontalScreenVCtr{
  143. func fillChartsData(_ weekData : [OneDayData]?) {
  144. arr0?.removeAll()
  145. arr1?.removeAll()
  146. arr2?.removeAll()
  147. arr3?.removeAll()
  148. arr4?.removeAll()
  149. arr5?.removeAll()
  150. if let arr = weekData {
  151. for i in 0..<arr.count {
  152. let oneDay = arr[i]
  153. let his_batteryVoltageMin = Float(oneDay.his_batteryVoltageMin!)// 蓄电池最低电压
  154. arr0?.append(his_batteryVoltageMin!)
  155. let his_batteryVoltageMax = Float(oneDay.his_batteryVoltageMax!)// 蓄电池最高电压
  156. arr1?.append(his_batteryVoltageMax!)
  157. //充电
  158. let his_chargingCurrentMax = Float(oneDay.his_chargingCurrentMax!)// 充电最大电流
  159. arr2?.append(his_chargingCurrentMax!)
  160. let his_generationCapacity = String(format: "%.3f", Double(oneDay.his_generationCapacity!)! * 0.001)// // 发电量
  161. // arr8?.append(his_generationCapacity! * 0.001)
  162. arr3?.append(Float(his_generationCapacity) as! Float)
  163. //放电
  164. let his_dischargeCurrentmax = Float(oneDay.his_dischargeCurrentmax!) // 放电最大电流
  165. arr4?.append(his_dischargeCurrentmax!)
  166. let his_dischargeCapacity = String(format: "%.3f", Double(oneDay.his_dischargeCapacity!)! * 0.001)// 放电量
  167. arr5?.append(Float(his_dischargeCapacity) as! Float)
  168. }
  169. }
  170. configCharts()
  171. notificationChangeToolButton()
  172. }
  173. //MARK : 设置数据
  174. func configCharts() {
  175. for i in 0..<3 {
  176. let ccc : DVBarChartView = self.view.viewWithTag(800000 + i) as! DVBarChartView
  177. ccc.removeAllPlot()
  178. ccc.reloadInputViews()
  179. if i == 0 {
  180. ccc.addPlot(arr0)
  181. ccc.addPlot2(arr1)
  182. var TitleArr0 = [String]()
  183. TitleArr0.removeAll()
  184. for value in arr0! {
  185. let title = String(format: "%@\n%.1fV","Minimum_battery_voltage".da_localizedStr(), value)
  186. TitleArr0.append(title)
  187. }
  188. var TitleArr1 = [String]()
  189. TitleArr1.removeAll()
  190. for value in arr1! {
  191. let title = String(format: "%@\n%.1fV","Maximum_battery_voltage".da_localizedStr(), value)
  192. TitleArr1.append(title)
  193. }
  194. ccc.xTitles = TitleArr0
  195. ccc.xTitles2 = TitleArr1
  196. ccc.legendTitle1 = "Maximum_battery_voltage".da_localizedStr()
  197. ccc.legendTitle2 = "Minimum_battery_voltage".da_localizedStr()
  198. }else if i == 1 {
  199. ccc.addPlot(arr2)
  200. ccc.addPlot2(arr3)
  201. var TitleArr0 = [String]()
  202. TitleArr0.removeAll()
  203. for value in arr2! {
  204. let title = String(format: "%@\n%.2fA","Maximum_current".da_localizedStr(), value)
  205. TitleArr0.append(title)
  206. }
  207. var TitleArr1 = [String]()
  208. TitleArr1.removeAll()
  209. for value in arr3! {
  210. let title = String(format: "%@\n%.3fkWh","Power_ge".da_localizedStr(), value)
  211. TitleArr1.append(title)
  212. }
  213. ccc.xTitles = TitleArr1
  214. ccc.xTitles2 = TitleArr0
  215. ccc.legendTitle1 = "Maximum_charge_current".da_localizedStr()
  216. ccc.legendTitle2 = "Power_ge".da_localizedStr()
  217. }else if i == 2 {
  218. ccc.addPlot(arr4)
  219. ccc.addPlot2(arr5)
  220. var TitleArr0 = [String]()
  221. TitleArr0.removeAll()
  222. for value in arr4! {
  223. let title = String(format: "%@\n%.2fA","Maximum_discharge_current".da_localizedStr(), value)
  224. TitleArr0.append(title)
  225. }
  226. var TitleArr1 = [String]()
  227. TitleArr1.removeAll()
  228. for value in arr5! {
  229. let title = String(format: "%@\n%.3fkWh","Discharge_amount".da_localizedStr(), value)
  230. TitleArr1.append(title)
  231. }
  232. ccc.xTitles = TitleArr1
  233. ccc.xTitles2 = TitleArr0
  234. ccc.legendTitle1 = "Maximum_discharge_current".da_localizedStr()
  235. ccc.legendTitle2 = "Discharge_amount".da_localizedStr()
  236. }
  237. ccc.draw()
  238. }
  239. }
  240. }
  241. extension SBTHorizontalScreenVCtr{
  242. @objc func btnClick(_ button: UIButton) {
  243. for i in 0..<3{
  244. let btn : UIButton = toolbar.viewWithTag((i + 8000)) as! UIButton
  245. btn.isSelected = false
  246. }
  247. button.isSelected = true
  248. let index = button.tag - 8000
  249. if index == 0 {
  250. show(batteryChartView)
  251. }else if index == 1 {
  252. show(chargeChartView)
  253. }else if index == 2 {
  254. show(dischargeChartView)
  255. }
  256. }
  257. func show(_ chartView:DVBarChartView) {
  258. batteryChartView.isHidden = true
  259. chargeChartView.isHidden = true
  260. dischargeChartView.isHidden = true
  261. chartView.isHidden = false
  262. }
  263. func createUI() {
  264. self.navigationItem.titleView = toolbar
  265. let buttonW : CGFloat = 375 / 3
  266. let buttonH : CGFloat = 30
  267. for i in 0..<3 {
  268. let btn = UIButton(type: .custom)
  269. btn.setTitle(btnTitles[i], for: .normal)
  270. btn.setTitleColor(UIColor(hexString: "#989898"), for: .normal)
  271. btn.setTitleColor(UIColor(hexString: "#FFFFFF"), for: .selected)
  272. btn.titleLabel?.font = UIFont(name: PingFangSC_Medium, size: 11)
  273. btn.setBackgroundImage(UIImage(named: "toorbar_normal"), for: .selected)
  274. btn.setBackgroundImage(UIImage(named: "toorbar_selected"), for: .selected)
  275. btn.frame = CGRect(x: CGFloat(i) * buttonW, y: 0, width: buttonW, height: CGFloat(buttonH))
  276. btn.tag = 8000 + i
  277. btn.layer.masksToBounds = true
  278. btn.layer.cornerRadius = 15
  279. btn.addTarget(self, action: #selector(btnClick), for: .touchUpInside)
  280. if i == 0 {
  281. btn.isSelected = true // 默认选择第一个
  282. show(batteryChartView)
  283. }
  284. toolbar.addSubview(btn)
  285. }
  286. //添加chartView
  287. self.view.addSubview(batteryChartView)
  288. self.view.addSubview(chargeChartView)
  289. self.view.addSubview(dischargeChartView)
  290. }
  291. }