123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- //
- // CandleStickChartViewController.swift
- // ChartsDemo-iOS
- //
- // Created by Jacob Christie on 2017-07-09.
- // Copyright © 2017 jc. All rights reserved.
- //
- #if canImport(UIKit)
- import UIKit
- #endif
- import Charts
- class CandleStickChartViewController: DemoBaseViewController {
- @IBOutlet var chartView: CandleStickChartView!
- @IBOutlet var sliderX: UISlider!
- @IBOutlet var sliderY: UISlider!
- @IBOutlet var sliderTextX: UITextField!
- @IBOutlet var sliderTextY: UITextField!
-
- override func viewDidLoad() {
- super.viewDidLoad()
-
- // Do any additional setup after loading the view.
- self.title = "Candle Stick Chart"
- self.options = [.toggleValues,
- .toggleIcons,
- .toggleHighlight,
- .animateX,
- .animateY,
- .animateXY,
- .saveToGallery,
- .togglePinchZoom,
- .toggleAutoScaleMinMax,
- .toggleShadowColorSameAsCandle,
- .toggleShowCandleBar,
- .toggleData]
-
- chartView.delegate = self
-
- chartView.chartDescription.enabled = false
-
- chartView.dragEnabled = false
- chartView.setScaleEnabled(true)
- chartView.maxVisibleCount = 200
- chartView.pinchZoomEnabled = true
-
- chartView.legend.horizontalAlignment = .right
- chartView.legend.verticalAlignment = .top
- chartView.legend.orientation = .vertical
- chartView.legend.drawInside = false
- chartView.legend.font = UIFont(name: "HelveticaNeue-Light", size: 10)!
-
- chartView.leftAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size: 10)!
- chartView.leftAxis.spaceTop = 0.3
- chartView.leftAxis.spaceBottom = 0.3
- chartView.leftAxis.axisMinimum = 0
-
- chartView.rightAxis.enabled = false
-
- chartView.xAxis.labelPosition = .bottom
- chartView.xAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size: 10)!
-
- sliderX.value = 10
- sliderY.value = 50
- slidersValueChanged(nil)
- }
-
- override func updateChartData() {
- if self.shouldHideData {
- chartView.data = nil
- return
- }
-
- self.setDataCount(Int(sliderX.value), range: UInt32(sliderY.value))
- }
-
- func setDataCount(_ count: Int, range: UInt32) {
- let yVals1 = (0..<count).map { (i) -> CandleChartDataEntry in
- let mult = range + 1
- let val = Double(arc4random_uniform(40) + mult)
- let high = Double(arc4random_uniform(9) + 8)
- let low = Double(arc4random_uniform(9) + 8)
- let open = Double(arc4random_uniform(6) + 1)
- let close = Double(arc4random_uniform(6) + 1)
- let even = i % 2 == 0
-
- 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")!)
- }
-
- let set1 = CandleChartDataSet(entries: yVals1, label: "Data Set")
- set1.axisDependency = .left
- set1.setColor(UIColor(white: 80/255, alpha: 1))
- set1.drawIconsEnabled = false
- set1.shadowColor = .darkGray
- set1.shadowWidth = 0.7
- set1.decreasingColor = .red
- set1.decreasingFilled = true
- set1.increasingColor = UIColor(red: 122/255, green: 242/255, blue: 84/255, alpha: 1)
- set1.increasingFilled = false
- set1.neutralColor = .blue
-
- let data = CandleChartData(dataSet: set1)
- chartView.data = data
- }
-
- override func optionTapped(_ option: Option) {
- switch option {
- case .toggleShadowColorSameAsCandle:
- for case let set as CandleChartDataSet in chartView.data! {
- set.shadowColorSameAsCandle = !set.shadowColorSameAsCandle
- }
- chartView.notifyDataSetChanged()
- case .toggleShowCandleBar:
- for set in chartView.data!.dataSets as! [CandleChartDataSet] {
- set.showCandleBar = !set.showCandleBar
- }
- chartView.notifyDataSetChanged()
- default:
- super.handleOption(option, forChartView: chartView)
- }
- }
-
- // MARK: - Actions
- @IBAction func slidersValueChanged(_ sender: Any?) {
- sliderTextX.text = "\(Int(sliderX.value))"
- sliderTextY.text = "\(Int(sliderY.value))"
-
- self.updateChartData()
- }}
|