BubbleChartViewController.swift 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. //
  2. // BubbleChartViewController.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 DGCharts
  12. class BubbleChartViewController: DemoBaseViewController {
  13. @IBOutlet var chartView: BubbleChartView!
  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 = "Bubble Chart"
  22. self.options = [.toggleValues,
  23. .toggleIcons,
  24. .toggleHighlight,
  25. .animateX,
  26. .animateY,
  27. .animateXY,
  28. .saveToGallery,
  29. .togglePinchZoom,
  30. .toggleAutoScaleMinMax,
  31. .toggleData]
  32. chartView.delegate = self
  33. chartView.chartDescription.enabled = false
  34. chartView.dragEnabled = false
  35. chartView.setScaleEnabled(true)
  36. chartView.maxVisibleCount = 200
  37. chartView.pinchZoomEnabled = true
  38. chartView.legend.horizontalAlignment = .right
  39. chartView.legend.verticalAlignment = .top
  40. chartView.legend.orientation = .vertical
  41. chartView.legend.drawInside = false
  42. chartView.legend.font = UIFont(name: "HelveticaNeue-Light", size: 10)!
  43. chartView.leftAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size: 10)!
  44. chartView.leftAxis.spaceTop = 0.3
  45. chartView.leftAxis.spaceBottom = 0.3
  46. chartView.leftAxis.axisMinimum = 0
  47. chartView.rightAxis.enabled = false
  48. chartView.xAxis.labelPosition = .bottom
  49. chartView.xAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size: 10)!
  50. sliderX.value = 10
  51. sliderY.value = 50
  52. slidersValueChanged(nil)
  53. }
  54. override func updateChartData() {
  55. if self.shouldHideData {
  56. chartView.data = nil
  57. return
  58. }
  59. self.setDataCount(Int(sliderX.value), range: UInt32(sliderY.value))
  60. }
  61. func setDataCount(_ count: Int, range: UInt32) {
  62. let yVals1 = (0..<count).map { (i) -> BubbleChartDataEntry in
  63. let val = Double(arc4random_uniform(range))
  64. let size = CGFloat(arc4random_uniform(range))
  65. return BubbleChartDataEntry(x: Double(i), y: val, size: size, icon: UIImage(named: "icon"))
  66. }
  67. let yVals2 = (0..<count).map { (i) -> BubbleChartDataEntry in
  68. let val = Double(arc4random_uniform(range))
  69. let size = CGFloat(arc4random_uniform(range))
  70. return BubbleChartDataEntry(x: Double(i), y: val, size: size, icon: UIImage(named: "icon"))
  71. }
  72. let yVals3 = (0..<count).map { (i) -> BubbleChartDataEntry in
  73. let val = Double(arc4random_uniform(range))
  74. let size = CGFloat(arc4random_uniform(range))
  75. return BubbleChartDataEntry(x: Double(i), y: val, size: size)
  76. }
  77. let set1 = BubbleChartDataSet(entries: yVals1, label: "DS 1")
  78. set1.drawIconsEnabled = false
  79. set1.setColor(ChartColorTemplates.colorful()[0], alpha: 0.5)
  80. set1.drawValuesEnabled = true
  81. let set2 = BubbleChartDataSet(entries: yVals2, label: "DS 2")
  82. set2.drawIconsEnabled = false
  83. set2.iconsOffset = CGPoint(x: 0, y: 15)
  84. set2.setColor(ChartColorTemplates.colorful()[1], alpha: 0.5)
  85. set2.drawValuesEnabled = true
  86. let set3 = BubbleChartDataSet(entries: yVals3, label: "DS 3")
  87. set3.setColor(ChartColorTemplates.colorful()[2], alpha: 0.5)
  88. set3.drawValuesEnabled = true
  89. let data = [set1, set2, set3] as BubbleChartData
  90. data.setDrawValues(false)
  91. data.setValueFont(UIFont(name: "HelveticaNeue-Light", size: 7)!)
  92. data.setHighlightCircleWidth(1.5)
  93. data.setValueTextColor(.white)
  94. chartView.data = data
  95. }
  96. override func optionTapped(_ option: Option) {
  97. super.handleOption(option, forChartView: chartView)
  98. }
  99. // MARK: - Actions
  100. @IBAction func slidersValueChanged(_ sender: Any?) {
  101. sliderTextX.text = "\(Int(sliderX.value))"
  102. sliderTextY.text = "\(Int(sliderY.value))"
  103. self.updateChartData()
  104. }
  105. }