HorizontalBarChartViewController.swift 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. //
  2. // HorizontalBarChartViewController.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 HorizontalBarChartViewController: DemoBaseViewController {
  13. @IBOutlet var chartView: HorizontalBarChartView!
  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 = "Horizontal Bar Char"
  22. self.options = [.toggleValues,
  23. .toggleIcons,
  24. .toggleHighlight,
  25. .animateX,
  26. .animateY,
  27. .animateXY,
  28. .saveToGallery,
  29. .togglePinchZoom,
  30. .toggleAutoScaleMinMax,
  31. .toggleData,
  32. .toggleBarBorders]
  33. self.setup(barLineChartView: chartView)
  34. chartView.delegate = self
  35. chartView.drawBarShadowEnabled = false
  36. chartView.drawValueAboveBarEnabled = true
  37. chartView.maxVisibleCount = 60
  38. let xAxis = chartView.xAxis
  39. xAxis.labelPosition = .bottom
  40. xAxis.labelFont = .systemFont(ofSize: 10)
  41. xAxis.drawAxisLineEnabled = true
  42. xAxis.granularity = 10
  43. let leftAxis = chartView.leftAxis
  44. leftAxis.labelFont = .systemFont(ofSize: 10)
  45. leftAxis.drawAxisLineEnabled = true
  46. leftAxis.drawGridLinesEnabled = true
  47. leftAxis.axisMinimum = 0
  48. let rightAxis = chartView.rightAxis
  49. rightAxis.enabled = true
  50. rightAxis.labelFont = .systemFont(ofSize: 10)
  51. rightAxis.drawAxisLineEnabled = true
  52. rightAxis.axisMinimum = 0
  53. let l = chartView.legend
  54. l.horizontalAlignment = .left
  55. l.verticalAlignment = .bottom
  56. l.orientation = .horizontal
  57. l.drawInside = false
  58. l.form = .square
  59. l.formSize = 8
  60. l.font = UIFont(name: "HelveticaNeue-Light", size: 11)!
  61. l.xEntrySpace = 4
  62. // chartView.legend = l
  63. chartView.fitBars = true
  64. sliderX.value = 12
  65. sliderY.value = 50
  66. slidersValueChanged(nil)
  67. chartView.animate(yAxisDuration: 2.5)
  68. }
  69. override func updateChartData() {
  70. if self.shouldHideData {
  71. chartView.data = nil
  72. return
  73. }
  74. self.setDataCount(Int(sliderX.value) + 1, range: UInt32(sliderY.value))
  75. }
  76. func setDataCount(_ count: Int, range: UInt32) {
  77. let barWidth = 9.0
  78. let spaceForBar = 10.0
  79. let yVals = (0..<count).map { (i) -> BarChartDataEntry in
  80. let mult = range + 1
  81. let val = Double(arc4random_uniform(mult))
  82. return BarChartDataEntry(x: Double(i)*spaceForBar, y: val, icon: #imageLiteral(resourceName: "icon"))
  83. }
  84. let set1 = BarChartDataSet(entries: yVals, label: "DataSet")
  85. set1.drawIconsEnabled = false
  86. let data = BarChartData(dataSet: set1)
  87. data.setValueFont(UIFont(name:"HelveticaNeue-Light", size:10)!)
  88. data.barWidth = barWidth
  89. chartView.data = data
  90. }
  91. override func optionTapped(_ option: Option) {
  92. super.handleOption(option, forChartView: chartView)
  93. }
  94. // MARK: - Actions
  95. @IBAction func slidersValueChanged(_ sender: Any?) {
  96. sliderTextX.text = "\(Int(sliderX.value))"
  97. sliderTextY.text = "\(Int(sliderY.value))"
  98. self.updateChartData()
  99. }
  100. }