MultipleLinesChartViewController.swift 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. //
  2. // MultipleLinesChartViewController.swift
  3. // ChartsDemo-iOS
  4. //
  5. // Created by Jacob Christie on 2017-07-09.
  6. // Copyright © 2017 jc. All rights reserved.
  7. //
  8. #if canImport(UIKit)
  9. import UIKit
  10. #endif
  11. import Charts
  12. class MultipleLinesChartViewController: DemoBaseViewController {
  13. @IBOutlet var chartView: LineChartView!
  14. @IBOutlet var sliderX: UISlider!
  15. @IBOutlet var sliderY: UISlider!
  16. @IBOutlet var sliderTextX: UITextField!
  17. @IBOutlet var sliderTextY: UITextField!
  18. override func viewDidLoad() {
  19. super.viewDidLoad()
  20. // Do any additional setup after loading the view.
  21. self.title = "Multiple Lines Chart"
  22. self.options = [.toggleValues,
  23. .toggleFilled,
  24. .toggleCircles,
  25. .toggleCubic,
  26. .toggleStepped,
  27. .toggleHighlight,
  28. .animateX,
  29. .animateY,
  30. .animateXY,
  31. .saveToGallery,
  32. .togglePinchZoom,
  33. .toggleAutoScaleMinMax,
  34. .toggleData]
  35. chartView.delegate = self
  36. chartView.chartDescription?.enabled = false
  37. chartView.leftAxis.enabled = false
  38. chartView.rightAxis.drawAxisLineEnabled = false
  39. chartView.xAxis.drawAxisLineEnabled = false
  40. chartView.drawBordersEnabled = false
  41. chartView.setScaleEnabled(true)
  42. let l = chartView.legend
  43. l.horizontalAlignment = .right
  44. l.verticalAlignment = .top
  45. l.orientation = .vertical
  46. l.drawInside = false
  47. // chartView.legend = l
  48. sliderX.value = 20
  49. sliderY.value = 100
  50. slidersValueChanged(nil)
  51. }
  52. override func updateChartData() {
  53. if self.shouldHideData {
  54. chartView.data = nil
  55. return
  56. }
  57. self.setDataCount(Int(sliderX.value), range: UInt32(sliderY.value))
  58. }
  59. // TODO: Refine data creation
  60. func setDataCount(_ count: Int, range: UInt32) {
  61. let colors = ChartColorTemplates.vordiplom()[0...2]
  62. let block: (Int) -> ChartDataEntry = { (i) -> ChartDataEntry in
  63. let val = Double(arc4random_uniform(range) + 3)
  64. return ChartDataEntry(x: Double(i), y: val)
  65. }
  66. let dataSets = (0..<3).map { i -> LineChartDataSet in
  67. let yVals = (0..<count).map(block)
  68. let set = LineChartDataSet(entries: yVals, label: "DataSet \(i)")
  69. set.lineWidth = 2.5
  70. set.circleRadius = 4
  71. set.circleHoleRadius = 2
  72. let color = colors[i % colors.count]
  73. set.setColor(color)
  74. set.setCircleColor(color)
  75. return set
  76. }
  77. dataSets[0].lineDashLengths = [5, 5]
  78. dataSets[0].colors = ChartColorTemplates.vordiplom()
  79. dataSets[0].circleColors = ChartColorTemplates.vordiplom()
  80. let data = LineChartData(dataSets: dataSets)
  81. data.setValueFont(.systemFont(ofSize: 7, weight: .light))
  82. chartView.data = data
  83. }
  84. override func optionTapped(_ option: Option) {
  85. switch option {
  86. case .toggleFilled:
  87. for set in chartView.data!.dataSets as! [LineChartDataSet] {
  88. set.drawFilledEnabled = !set.drawFilledEnabled
  89. }
  90. chartView.setNeedsDisplay()
  91. case .toggleCircles:
  92. for set in chartView.data!.dataSets as! [LineChartDataSet] {
  93. set.drawCirclesEnabled = !set.drawCirclesEnabled
  94. }
  95. chartView.setNeedsDisplay()
  96. case .toggleCubic:
  97. for set in chartView.data!.dataSets as! [LineChartDataSet] {
  98. set.mode = (set.mode == .cubicBezier) ? .linear : .cubicBezier
  99. }
  100. chartView.setNeedsDisplay()
  101. case .toggleStepped:
  102. for set in chartView.data!.dataSets as! [LineChartDataSet] {
  103. set.mode = (set.mode == .stepped) ? .linear : .stepped
  104. }
  105. chartView.setNeedsDisplay()
  106. default:
  107. super.handleOption(option, forChartView: chartView)
  108. }
  109. }
  110. @IBAction func slidersValueChanged(_ sender: Any?) {
  111. sliderTextX.text = "\(Int(sliderX.value))"
  112. sliderTextY.text = "\(Int(sliderY.value))"
  113. self.updateChartData()
  114. }
  115. }