CandleStickChartViewController.swift 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. #if canImport(UIKit)
  9. import UIKit
  10. #endif
  11. import Charts
  12. class CandleStickChartViewController: DemoBaseViewController {
  13. @IBOutlet var chartView: CandleStickChartView!
  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 = "Candle Stick Chart"
  22. self.options = [.toggleValues,
  23. .toggleIcons,
  24. .toggleHighlight,
  25. .animateX,
  26. .animateY,
  27. .animateXY,
  28. .saveToGallery,
  29. .togglePinchZoom,
  30. .toggleAutoScaleMinMax,
  31. .toggleShadowColorSameAsCandle,
  32. .toggleShowCandleBar,
  33. .toggleData]
  34. chartView.delegate = self
  35. chartView.chartDescription.enabled = false
  36. chartView.dragEnabled = false
  37. chartView.setScaleEnabled(true)
  38. chartView.maxVisibleCount = 200
  39. chartView.pinchZoomEnabled = true
  40. chartView.legend.horizontalAlignment = .right
  41. chartView.legend.verticalAlignment = .top
  42. chartView.legend.orientation = .vertical
  43. chartView.legend.drawInside = false
  44. chartView.legend.font = UIFont(name: "HelveticaNeue-Light", size: 10)!
  45. chartView.leftAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size: 10)!
  46. chartView.leftAxis.spaceTop = 0.3
  47. chartView.leftAxis.spaceBottom = 0.3
  48. chartView.leftAxis.axisMinimum = 0
  49. chartView.rightAxis.enabled = false
  50. chartView.xAxis.labelPosition = .bottom
  51. chartView.xAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size: 10)!
  52. sliderX.value = 10
  53. sliderY.value = 50
  54. slidersValueChanged(nil)
  55. }
  56. override func updateChartData() {
  57. if self.shouldHideData {
  58. chartView.data = nil
  59. return
  60. }
  61. self.setDataCount(Int(sliderX.value), range: UInt32(sliderY.value))
  62. }
  63. func setDataCount(_ count: Int, range: UInt32) {
  64. let yVals1 = (0..<count).map { (i) -> CandleChartDataEntry in
  65. let mult = range + 1
  66. let val = Double(arc4random_uniform(40) + mult)
  67. let high = Double(arc4random_uniform(9) + 8)
  68. let low = Double(arc4random_uniform(9) + 8)
  69. let open = Double(arc4random_uniform(6) + 1)
  70. let close = Double(arc4random_uniform(6) + 1)
  71. let even = i % 2 == 0
  72. 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")!)
  73. }
  74. let set1 = CandleChartDataSet(entries: yVals1, label: "Data Set")
  75. set1.axisDependency = .left
  76. set1.setColor(UIColor(white: 80/255, alpha: 1))
  77. set1.drawIconsEnabled = false
  78. set1.shadowColor = .darkGray
  79. set1.shadowWidth = 0.7
  80. set1.decreasingColor = .red
  81. set1.decreasingFilled = true
  82. set1.increasingColor = UIColor(red: 122/255, green: 242/255, blue: 84/255, alpha: 1)
  83. set1.increasingFilled = false
  84. set1.neutralColor = .blue
  85. let data = CandleChartData(dataSet: set1)
  86. chartView.data = data
  87. }
  88. override func optionTapped(_ option: Option) {
  89. switch option {
  90. case .toggleShadowColorSameAsCandle:
  91. for case let set as CandleChartDataSet in chartView.data! {
  92. set.shadowColorSameAsCandle = !set.shadowColorSameAsCandle
  93. }
  94. chartView.notifyDataSetChanged()
  95. case .toggleShowCandleBar:
  96. for set in chartView.data!.dataSets as! [CandleChartDataSet] {
  97. set.showCandleBar = !set.showCandleBar
  98. }
  99. chartView.notifyDataSetChanged()
  100. default:
  101. super.handleOption(option, forChartView: chartView)
  102. }
  103. }
  104. // MARK: - Actions
  105. @IBAction func slidersValueChanged(_ sender: Any?) {
  106. sliderTextX.text = "\(Int(sliderX.value))"
  107. sliderTextY.text = "\(Int(sliderY.value))"
  108. self.updateChartData()
  109. }}