123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- //
- // BarChartViewController.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
- #if canImport(UIKit)
- import UIKit
- #endif
- class BarChartViewController: DemoBaseViewController {
-
- @IBOutlet var chartView: BarChartView!
- @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 = "Bar Chart"
-
- self.options = [.toggleValues,
- .toggleHighlight,
- .animateX,
- .animateY,
- .animateXY,
- .saveToGallery,
- .togglePinchZoom,
- .toggleData,
- .toggleBarBorders]
-
- self.setup(barLineChartView: chartView)
-
- chartView.delegate = self
-
- chartView.drawBarShadowEnabled = false
- chartView.drawValueAboveBarEnabled = false
-
- chartView.maxVisibleCount = 60
-
- let xAxis = chartView.xAxis
- xAxis.labelPosition = .bottom
- xAxis.labelFont = .systemFont(ofSize: 10)
- xAxis.granularity = 1
- xAxis.labelCount = 7
- xAxis.valueFormatter = DayAxisValueFormatter(chart: chartView)
-
- let leftAxisFormatter = NumberFormatter()
- leftAxisFormatter.minimumFractionDigits = 0
- leftAxisFormatter.maximumFractionDigits = 1
- leftAxisFormatter.negativeSuffix = " $"
- leftAxisFormatter.positiveSuffix = " $"
-
- let leftAxis = chartView.leftAxis
- leftAxis.labelFont = .systemFont(ofSize: 10)
- leftAxis.labelCount = 8
- leftAxis.valueFormatter = DefaultAxisValueFormatter(formatter: leftAxisFormatter)
- leftAxis.labelPosition = .outsideChart
- leftAxis.spaceTop = 0.15
- leftAxis.axisMinimum = 0 // FIXME: HUH?? this replaces startAtZero = YES
-
- let rightAxis = chartView.rightAxis
- rightAxis.enabled = true
- rightAxis.labelFont = .systemFont(ofSize: 10)
- rightAxis.labelCount = 8
- rightAxis.valueFormatter = leftAxis.valueFormatter
- rightAxis.spaceTop = 0.15
- rightAxis.axisMinimum = 0
-
- let l = chartView.legend
- l.horizontalAlignment = .left
- l.verticalAlignment = .bottom
- l.orientation = .horizontal
- l.drawInside = false
- l.form = .circle
- l.formSize = 9
- l.font = UIFont(name: "HelveticaNeue-Light", size: 11)!
- l.xEntrySpace = 4
- // chartView.legend = l
- let marker = XYMarkerView(color: UIColor(white: 180/250, alpha: 1),
- font: .systemFont(ofSize: 12),
- textColor: .white,
- insets: UIEdgeInsets(top: 8, left: 8, bottom: 20, right: 8),
- xAxisValueFormatter: chartView.xAxis.valueFormatter!)
- marker.chartView = chartView
- marker.minimumSize = CGSize(width: 80, height: 40)
- chartView.marker = marker
-
- sliderX.value = 12
- sliderY.value = 50
- slidersValueChanged(nil)
- }
-
- 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 start = 1
-
- let yVals = (start..<start+count+1).map { (i) -> BarChartDataEntry in
- let mult = range + 1
- let val = Double(arc4random_uniform(mult))
- if arc4random_uniform(100) < 25 {
- return BarChartDataEntry(x: Double(i), y: val, icon: UIImage(named: "icon"))
- } else {
- return BarChartDataEntry(x: Double(i), y: val)
- }
- }
-
- var set1: BarChartDataSet! = nil
- if let set = chartView.data?.first as? BarChartDataSet {
- set1 = set
- set1.replaceEntries(yVals)
- chartView.data?.notifyDataChanged()
- chartView.notifyDataSetChanged()
- } else {
- set1 = BarChartDataSet(entries: yVals, label: "The year 2017")
- set1.colors = ChartColorTemplates.material()
- set1.drawValuesEnabled = false
-
- let data = BarChartData(dataSet: set1)
- data.setValueFont(UIFont(name: "HelveticaNeue-Light", size: 10)!)
- data.barWidth = 0.9
- chartView.data = data
- }
-
- // chartView.setNeedsDisplay()
- }
-
- override func optionTapped(_ option: Option) {
- super.handleOption(option, forChartView: chartView)
- }
-
- // MARK: - Actions
- @IBAction func slidersValueChanged(_ sender: Any?) {
- sliderTextX.text = "\(Int(sliderX.value + 2))"
- sliderTextY.text = "\(Int(sliderY.value))"
-
- self.updateChartData()
- }
- }
|