// // CubicLineChartViewController.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 private class CubicLineSampleFillFormatter: FillFormatter { func getFillLinePosition(dataSet: LineChartDataSetProtocol, dataProvider: LineChartDataProvider) -> CGFloat { return -10 } } class CubicLineChartViewController: 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 = "Cubic Line Chart" self.options = [.toggleValues, .toggleFilled, .toggleCircles, .toggleCubic, .toggleHorizontalCubic, .toggleStepped, .toggleHighlight, .animateX, .animateY, .animateXY, .saveToGallery, .togglePinchZoom, .toggleAutoScaleMinMax, .toggleData] chartView.delegate = self chartView.setViewPortOffsets(left: 0, top: 20, right: 0, bottom: 0) chartView.backgroundColor = UIColor(red: 104/255, green: 241/255, blue: 175/255, alpha: 1) chartView.dragEnabled = true chartView.setScaleEnabled(true) chartView.pinchZoomEnabled = false chartView.maxHighlightDistance = 300 chartView.xAxis.enabled = false let yAxis = chartView.leftAxis yAxis.labelFont = UIFont(name: "HelveticaNeue-Light", size:12)! yAxis.setLabelCount(6, force: false) yAxis.labelTextColor = .white yAxis.labelPosition = .insideChart yAxis.axisLineColor = .white chartView.rightAxis.enabled = false chartView.legend.enabled = false sliderX.value = 45 sliderY.value = 100 self.slidersValueChanged(nil) chartView.animate(xAxisDuration: 2, yAxisDuration: 2) } 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.. ChartDataEntry in let mult = range + 1 let val = Double(arc4random_uniform(mult) + 20) return ChartDataEntry(x: Double(i), y: val) } let set1 = LineChartDataSet(entries: yVals1, label: "DataSet 1") set1.mode = .cubicBezier set1.drawCirclesEnabled = false set1.lineWidth = 1.8 set1.circleRadius = 4 set1.setCircleColor(.white) set1.highlightColor = UIColor(red: 244/255, green: 117/255, blue: 117/255, alpha: 1) set1.fillColor = .white set1.fillAlpha = 1 set1.drawHorizontalHighlightIndicatorEnabled = false set1.fillFormatter = CubicLineSampleFillFormatter() let data = LineChartData(dataSet: set1) data.setValueFont(UIFont(name: "HelveticaNeue-Light", size: 9)!) data.setDrawValues(false) 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) } } // MARK: - Actions @IBAction func slidersValueChanged(_ sender: Any?) { sliderTextX.text = "\(Int(sliderX.value))" sliderTextY.text = "\(Int(sliderY.value))" self.updateChartData() } }