123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- //
- // HalfPieChartViewController.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 HalfPieChartViewController: DemoBaseViewController {
- @IBOutlet var chartView: PieChartView!
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do any additional setup after loading the view.
- self.title = "Half Pie Chart"
-
- self.options = [.toggleValues,
- .toggleXValues,
- .togglePercent,
- .toggleHole,
- .animateX,
- .animateY,
- .animateXY,
- .spin,
- .drawCenter,
- .saveToGallery,
- .toggleData]
-
- self.setup(pieChartView: chartView)
-
- chartView.delegate = self
-
- chartView.holeColor = .white
- chartView.transparentCircleColor = NSUIColor.white.withAlphaComponent(0.43)
- chartView.holeRadiusPercent = 0.58
- chartView.rotationEnabled = false
- chartView.highlightPerTapEnabled = true
-
- chartView.maxAngle = 180 // Half chart
- chartView.rotationAngle = 180 // Rotate to make the half on the upper side
- chartView.centerTextOffset = CGPoint(x: 0, y: -20)
-
- let l = chartView.legend
- l.horizontalAlignment = .center
- l.verticalAlignment = .top
- l.orientation = .horizontal
- l.drawInside = false
- l.xEntrySpace = 7
- l.yEntrySpace = 0
- l.yOffset = 0
- // chartView.legend = l
- // entry label styling
- chartView.entryLabelColor = .white
- chartView.entryLabelFont = UIFont(name:"HelveticaNeue-Light", size:12)!
-
- self.updateChartData()
-
- chartView.animate(xAxisDuration: 1.4, easingOption: .easeOutBack)
- }
-
- override func updateChartData() {
- if self.shouldHideData {
- chartView.data = nil
- return
- }
-
- self.setDataCount(4, range: 100)
- }
- func setDataCount(_ count: Int, range: UInt32) {
- let entries = (0..<count).map { (i) -> PieChartDataEntry in
- // IMPORTANT: In a PieChart, no values (Entry) should have the same xIndex (even if from different DataSets), since no values can be drawn above each other.
- return PieChartDataEntry(value: Double(arc4random_uniform(range) + range / 5),
- label: parties[i % parties.count])
- }
-
- let set = PieChartDataSet(entries: entries, label: "Election Results")
- set.sliceSpace = 3
- set.selectionShift = 5
- set.colors = ChartColorTemplates.material()
-
- let data = PieChartData(dataSet: set)
-
- let pFormatter = NumberFormatter()
- pFormatter.numberStyle = .percent
- pFormatter.maximumFractionDigits = 1
- pFormatter.multiplier = 1
- pFormatter.percentSymbol = " %"
- data.setValueFormatter(DefaultValueFormatter(formatter: pFormatter))
-
- data.setValueFont(UIFont(name: "HelveticaNeue-Light", size: 11)!)
- data.setValueTextColor(.white)
-
- chartView.data = data
-
- chartView.setNeedsDisplay()
- }
-
- override func optionTapped(_ option: Option) {
- switch option {
- case .toggleXValues:
- chartView.drawEntryLabelsEnabled = !chartView.drawEntryLabelsEnabled
- chartView.setNeedsDisplay()
-
- case .togglePercent:
- chartView.usePercentValuesEnabled = !chartView.usePercentValuesEnabled
- chartView.setNeedsDisplay()
-
- case .toggleHole:
- chartView.drawHoleEnabled = !chartView.drawHoleEnabled
- chartView.setNeedsDisplay()
-
- case .drawCenter:
- chartView.drawCenterTextEnabled = !chartView.drawCenterTextEnabled
- chartView.setNeedsDisplay()
-
- case .animateX:
- chartView.animate(xAxisDuration: 1.4)
-
- case .animateY:
- chartView.animate(yAxisDuration: 1.4)
-
- case .animateXY:
- chartView.animate(xAxisDuration: 1.4, yAxisDuration: 1.4)
-
- case .spin:
- chartView.spin(duration: 2,
- fromAngle: chartView.rotationAngle,
- toAngle: chartView.rotationAngle + 360,
- easingOption: .easeInCubic)
-
- default:
- handleOption(option, forChartView: chartView)
- }
- }
- }
|