IHLineChartModel.swift 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. //
  2. // IHLineChartModel.swift
  3. // Inhealth
  4. //
  5. // Created by weclouds on 2019/12/16.
  6. // Copyright © 2019 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. import Charts
  10. struct LineChartRawData {
  11. var yData:[Double]!
  12. init(yData:[Double]) {
  13. self.yData = yData
  14. }
  15. }
  16. struct YRawData {
  17. var yData:[Double]
  18. }
  19. struct LineChartRawDataWithLabel {
  20. var data:LineChartRawData
  21. }
  22. class IHLineChartModel: NSObject {
  23. static var share = IHLineChartModel()
  24. fileprivate func getLineDataSet(_ rawData:LineChartRawData) -> LineChartDataSet? {
  25. var yChartVals = [ChartDataEntry]()
  26. for (index, val) in rawData.yData.enumerated() {
  27. yChartVals.append(ChartDataEntry(x: Double(index), y: val))
  28. }
  29. var lineDataSet:LineChartDataSet? = nil
  30. lineDataSet = LineChartDataSet(entries: yChartVals)
  31. configDataSet(lineDataSet!)
  32. lineDataSet?.setColor(UIColor(hexString: "#573F95")!)
  33. lineDataSet?.circleColors = [.clear]
  34. return lineDataSet
  35. }
  36. fileprivate func configDataSet(_ lineDataSet :LineChartDataSet) {
  37. lineDataSet.drawIconsEnabled = false
  38. lineDataSet.lineWidth = 1.5
  39. lineDataSet.circleRadius = 3
  40. lineDataSet.drawCircleHoleEnabled = true
  41. lineDataSet.circleHoleRadius = 1.5
  42. lineDataSet.circleHoleColor = .clear
  43. lineDataSet.valueFont = .systemFont(ofSize: 9)
  44. lineDataSet.formLineDashLengths = [5, 2.5]
  45. lineDataSet.formLineWidth = 1.5
  46. lineDataSet.formSize = 15
  47. lineDataSet.resetCircleColors(0) //删除第一个点
  48. lineDataSet.drawValuesEnabled = false
  49. lineDataSet.drawFilledEnabled = false
  50. lineDataSet.mode = .cubicBezier
  51. lineDataSet.highlightEnabled = true //不启用十字线
  52. lineDataSet.highlightColor = UIColor.clear
  53. // lineDataSet.highlightLineWidth = 2
  54. let valueFormatter = NumberFormatter()
  55. valueFormatter.numberStyle = .decimal
  56. valueFormatter.maximumFractionDigits = 3
  57. lineDataSet.drawFilledEnabled = false
  58. }
  59. fileprivate func gLineChartSetData(_ chartView:LineChartView, xVals:[String], rawDatas:[LineChartRawDataWithLabel]) {
  60. var dataSets = [LineChartDataSet]()
  61. for i in 0..<rawDatas.count {
  62. let rawData = rawDatas[i]
  63. let set = getLineDataSet(rawData.data)
  64. if let set = set {
  65. dataSets.append(set)
  66. }
  67. }
  68. let data = LineChartData(dataSets: dataSets)
  69. chartView.data = data
  70. chartView.xAxis.valueFormatter = IndexAxisValueFormatter(values: xVals)
  71. // let marker = BalloonMarker(color: .clear,
  72. // font: .systemFont(ofSize: 12),
  73. // textColor: .black,
  74. // insets: UIEdgeInsets(top: 8, left: 8, bottom: 20, right: 8))
  75. let marker = XYMarkerView(color: UIColor(hexString: "#573F95")!, font: .systemFont(ofSize: 12), textColor: .white, insets: UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5), xAxisValueFormatter: IndexAxisValueFormatter(values: xVals))
  76. marker.chartView = chartView
  77. marker.minimumSize = CGSize(width: 80, height: 20)
  78. chartView.marker = marker
  79. // chartView.xAxis.labelCount = xVals.count
  80. chartView.xAxis.granularity = 1.0
  81. // chartView.xAxis.axisMinimum = 0
  82. // chartView.xAxis.axisMaximum = Double(xVals.count - 1)
  83. // chartView.xAxis.forceLabelsEnabled = true
  84. // chartView.xAxis.granularityEnabled = true
  85. }
  86. fileprivate func gChangeToYLineData(_ rawDatas:[YRawData]) -> [LineChartRawDataWithLabel] {
  87. var yLineDatas = [LineChartRawDataWithLabel]()
  88. var index:Int = 0
  89. for rawData in rawDatas {
  90. let yLineData = LineChartRawDataWithLabel(data: LineChartRawData(yData: rawData.yData))
  91. yLineDatas.append(yLineData)
  92. index += 1
  93. }
  94. return yLineDatas
  95. }
  96. open func gRealChartSetData(_ chartView:LineChartView, xVals:[String], rawDatas:[YRawData]) {
  97. let yLineDatas = gChangeToYLineData(rawDatas)
  98. gLineChartSetData(chartView, xVals: xVals, rawDatas: yLineDatas)
  99. }
  100. }