CandleStickChartViewController.swift 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. //
  2. // CandleStickChartViewController.swift
  3. // ChartsDemo-iOS
  4. //
  5. // Created by Jacob Christie on 2017-07-09.
  6. // Copyright © 2017 jc. All rights reserved.
  7. //
  8. import UIKit
  9. import Charts
  10. class CandleStickChartViewController: DemoBaseViewController {
  11. @IBOutlet var chartView: CandleStickChartView!
  12. @IBOutlet var sliderX: UISlider!
  13. @IBOutlet var sliderY: UISlider!
  14. @IBOutlet var sliderTextX: UITextField!
  15. @IBOutlet var sliderTextY: UITextField!
  16. override func viewDidLoad() {
  17. super.viewDidLoad()
  18. // Do any additional setup after loading the view.
  19. self.title = "Bubble Chart"
  20. self.options = [.toggleValues,
  21. .toggleIcons,
  22. .toggleHighlight,
  23. .animateX,
  24. .animateY,
  25. .animateXY,
  26. .saveToGallery,
  27. .togglePinchZoom,
  28. .toggleAutoScaleMinMax,
  29. .toggleShadowColorSameAsCandle,
  30. .toggleData]
  31. chartView.delegate = self
  32. chartView.chartDescription?.enabled = false
  33. chartView.dragEnabled = false
  34. chartView.setScaleEnabled(true)
  35. chartView.maxVisibleCount = 200
  36. chartView.pinchZoomEnabled = true
  37. chartView.legend.horizontalAlignment = .right
  38. chartView.legend.verticalAlignment = .top
  39. chartView.legend.orientation = .vertical
  40. chartView.legend.drawInside = false
  41. chartView.legend.font = UIFont(name: "HelveticaNeue-Light", size: 10)!
  42. chartView.leftAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size: 10)!
  43. chartView.leftAxis.spaceTop = 0.3
  44. chartView.leftAxis.spaceBottom = 0.3
  45. chartView.leftAxis.axisMinimum = 0
  46. chartView.rightAxis.enabled = false
  47. chartView.xAxis.labelPosition = .bottom
  48. chartView.xAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size: 10)!
  49. sliderX.value = 10
  50. sliderY.value = 50
  51. slidersValueChanged(nil)
  52. }
  53. override func updateChartData() {
  54. if self.shouldHideData {
  55. chartView.data = nil
  56. return
  57. }
  58. self.setDataCount(Int(sliderX.value), range: UInt32(sliderY.value))
  59. }
  60. func setDataCount(_ count: Int, range: UInt32) {
  61. let yVals1 = (0..<count).map { (i) -> CandleChartDataEntry in
  62. let mult = range + 1
  63. let val = Double(arc4random_uniform(40) + mult)
  64. let high = Double(arc4random_uniform(9) + 8)
  65. let low = Double(arc4random_uniform(9) + 8)
  66. let open = Double(arc4random_uniform(6) + 1)
  67. let close = Double(arc4random_uniform(6) + 1)
  68. let even = i % 2 == 0
  69. return CandleChartDataEntry(x: Double(i), shadowH: val + high, shadowL: val - low, open: even ? val + open : val - open, close: even ? val - close : val + close, icon: UIImage(named: "icon")!)
  70. }
  71. let set1 = CandleChartDataSet(values: yVals1, label: "Data Set")
  72. set1.axisDependency = .left
  73. set1.setColor(UIColor(white: 80/255, alpha: 1))
  74. set1.drawIconsEnabled = false
  75. set1.shadowColor = .darkGray
  76. set1.shadowWidth = 0.7
  77. set1.decreasingColor = .red
  78. set1.decreasingFilled = true
  79. set1.increasingColor = UIColor(red: 122/255, green: 242/255, blue: 84/255, alpha: 1)
  80. set1.increasingFilled = false
  81. set1.neutralColor = .blue
  82. let data = CandleChartData(dataSet: set1)
  83. chartView.data = data
  84. }
  85. override func optionTapped(_ option: Option) {
  86. if .toggleShadowColorSameAsCandle ~= option {
  87. for set in chartView.data!.dataSets as! [CandleChartDataSet] {
  88. set.shadowColorSameAsCandle = !set.shadowColorSameAsCandle
  89. }
  90. chartView.notifyDataSetChanged()
  91. } else {
  92. super.handleOption(option, forChartView: chartView)
  93. }
  94. }
  95. // MARK: - Actions
  96. @IBAction func slidersValueChanged(_ sender: Any?) {
  97. sliderTextX.text = "\(Int(sliderX.value))"
  98. sliderTextY.text = "\(Int(sliderY.value))"
  99. self.updateChartData()
  100. }}