123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- //
- // LineChart2ViewController.swift
- // ChartsDemo-iOS
- //
- // Created by Jacob Christie on 2017-07-09.
- // Copyright © 2017 jc. All rights reserved.
- //
- #if canImport(UIKit)
- import UIKit
- #endif
- import DGCharts
- class LineChart2ViewController: DemoBaseViewController {
- @IBOutlet var chartView: LineChartView!
- @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 = "Line Chart 2"
- self.options = [.toggleValues,
- .toggleFilled,
- .toggleCircles,
- .toggleCubic,
- .toggleHorizontalCubic,
- .toggleStepped,
- .toggleHighlight,
- .animateX,
- .animateY,
- .animateXY,
- .saveToGallery,
- .togglePinchZoom,
- .toggleAutoScaleMinMax,
- .toggleData]
-
- chartView.delegate = self
-
- chartView.chartDescription.enabled = false
- chartView.dragEnabled = true
- chartView.setScaleEnabled(true)
- chartView.pinchZoomEnabled = true
-
- let l = chartView.legend
- l.form = .line
- l.font = UIFont(name: "HelveticaNeue-Light", size: 11)!
- l.textColor = .white
- l.horizontalAlignment = .left
- l.verticalAlignment = .bottom
- l.orientation = .horizontal
- l.drawInside = false
-
- let xAxis = chartView.xAxis
- xAxis.labelFont = .systemFont(ofSize: 11)
- xAxis.labelTextColor = .white
- xAxis.drawAxisLineEnabled = false
-
- let leftAxis = chartView.leftAxis
- leftAxis.labelTextColor = UIColor(red: 51/255, green: 181/255, blue: 229/255, alpha: 1)
- leftAxis.axisMaximum = 200
- leftAxis.axisMinimum = 0
- leftAxis.drawGridLinesEnabled = true
- leftAxis.granularityEnabled = true
-
- let rightAxis = chartView.rightAxis
- rightAxis.labelTextColor = .red
- rightAxis.axisMaximum = 900
- rightAxis.axisMinimum = -200
- rightAxis.granularityEnabled = false
-
- sliderX.value = 20
- sliderY.value = 30
- slidersValueChanged(nil)
-
- chartView.animate(xAxisDuration: 2.5)
- }
-
- override func updateChartData() {
- if self.shouldHideData {
- chartView.data = nil
- return
- }
-
- self.setDataCount(Int(sliderX.value + 1), range: UInt32(sliderY.value))
- }
-
- func setDataCount(_ count: Int, range: UInt32) {
- let yVals1 = (0..<count).map { (i) -> ChartDataEntry in
- let mult = range / 2
- let val = Double(arc4random_uniform(mult) + 50)
- return ChartDataEntry(x: Double(i), y: val)
- }
- let yVals2 = (0..<count).map { (i) -> ChartDataEntry in
- let val = Double(arc4random_uniform(range) + 450)
- return ChartDataEntry(x: Double(i), y: val)
- }
- let yVals3 = (0..<count).map { (i) -> ChartDataEntry in
- let val = Double(arc4random_uniform(range) + 500)
- return ChartDataEntry(x: Double(i), y: val)
- }
- let set1 = LineChartDataSet(entries: yVals1, label: "DataSet 1")
- set1.axisDependency = .left
- set1.setColor(UIColor(red: 51/255, green: 181/255, blue: 229/255, alpha: 1))
- set1.setCircleColor(.white)
- set1.lineWidth = 2
- set1.circleRadius = 3
- set1.fillAlpha = 65/255
- set1.fillColor = UIColor(red: 51/255, green: 181/255, blue: 229/255, alpha: 1)
- set1.highlightColor = UIColor(red: 244/255, green: 117/255, blue: 117/255, alpha: 1)
- set1.drawCircleHoleEnabled = false
-
- let set2 = LineChartDataSet(entries: yVals2, label: "DataSet 2")
- set2.axisDependency = .right
- set2.setColor(.red)
- set2.setCircleColor(.white)
- set2.lineWidth = 2
- set2.circleRadius = 3
- set2.fillAlpha = 65/255
- set2.fillColor = .red
- set2.highlightColor = UIColor(red: 244/255, green: 117/255, blue: 117/255, alpha: 1)
- set2.drawCircleHoleEnabled = false
- let set3 = LineChartDataSet(entries: yVals3, label: "DataSet 3")
- set3.axisDependency = .right
- set3.setColor(.yellow)
- set3.setCircleColor(.white)
- set3.lineWidth = 2
- set3.circleRadius = 3
- set3.fillAlpha = 65/255
- set3.fillColor = UIColor.yellow.withAlphaComponent(200/255)
- set3.highlightColor = UIColor(red: 244/255, green: 117/255, blue: 117/255, alpha: 1)
- set3.drawCircleHoleEnabled = false
-
- let data: LineChartData = [set1, set2, set3]
- data.setValueTextColor(.white)
- data.setValueFont(.systemFont(ofSize: 9))
-
- chartView.data = data
- }
-
- override func optionTapped(_ option: Option) {
- guard let data = chartView.data else { return }
- switch option {
- case .toggleFilled:
- for case let set as LineChartDataSet in data {
- set.drawFilledEnabled = !set.drawFilledEnabled
- }
- chartView.setNeedsDisplay()
-
- case .toggleCircles:
- for case let set as LineChartDataSet in data {
- set.drawCirclesEnabled = !set.drawCirclesEnabled
- }
- chartView.setNeedsDisplay()
-
- case .toggleCubic:
- for case let set as LineChartDataSet in data {
- set.mode = (set.mode == .cubicBezier) ? .linear : .cubicBezier
- }
- chartView.setNeedsDisplay()
-
- case .toggleStepped:
- for case let set as LineChartDataSet in data {
- set.mode = (set.mode == .stepped) ? .linear : .stepped
- }
- chartView.setNeedsDisplay()
-
- case .toggleHorizontalCubic:
- for case let set as LineChartDataSet in data {
- set.mode = (set.mode == .cubicBezier) ? .horizontalBezier : .cubicBezier
- }
- chartView.setNeedsDisplay()
-
- default:
- super.handleOption(option, forChartView: chartView)
- }
- }
-
- @IBAction func slidersValueChanged(_ sender: Any?) {
- sliderTextX.text = "\(Int(sliderX.value))"
- sliderTextY.text = "\(Int(sliderY.value))"
-
- self.updateChartData()
- }
- //}
- // TODO: Declarations in extensions cannot override yet.
- //extension LineChart2ViewController {
- override func chartValueSelected(_ chartView: ChartViewBase, entry: ChartDataEntry, highlight: Highlight) {
- super.chartValueSelected(chartView, entry: entry, highlight: highlight)
-
- self.chartView.centerViewToAnimated(xValue: entry.x, yValue: entry.y,
- axis: self.chartView.data![highlight.dataSetIndex].axisDependency,
- duration: 1)
- //[_chartView moveViewToAnimatedWithXValue:entry.x yValue:entry.y axis:[_chartView.data getDataSetByIndex:dataSetIndex].axisDependency duration:1.0];
- //[_chartView zoomAndCenterViewAnimatedWithScaleX:1.8 scaleY:1.8 xValue:entry.x yValue:entry.y axis:[_chartView.data getDataSetByIndex:dataSetIndex].axisDependency duration:1.0];
- }
- }
|