最近项目当中需要用到图标,然后在上查了下,找到了这个,感觉应该比较好用。github地址

饼图
1.倒入Charts,然后实历化饼状图的类PieChartView
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| import Charts class WorkManagerHeaderView: UICollectionReusableView { let lableTitle:UILabel = { return UILabel.label(font: fontVaue) }() var months = ["1-9", "10-19", "20-29", "30-39","40-49"] var unitsSold = [30.0, 100.0, 108.0, 60.0, 50.0] lazy var pieChartView: PieChartView = { let pieChartView = PieChartView() pieChartView.backgroundColor = UIColor.white return pieChartView }() override init(frame: CGRect) { super.init(frame: frame) self.backgroundColor = UIColor.clear addSubView(pieChartView) self.pieChartView.snp.makeConstraints { (make) in make.left.equalTo(self) make.top.equalTo(self.).offset(10) make.right.equalTo(self) make.height.equalTo(250) } setChart(dataPoints: months, values: unitsSold) }
|
2.设置饼状图的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| func setChart(dataPoints: [String], values: [Double]) { var dataEntries: [ChartDataEntry] = [] for i in 0..<dataPoints.count { let entry = PieChartDataEntry(value: values[i], label: "\(dataPoints[i])") dataEntries.append(entry) } let pichartDataSet = PieChartDataSet(values: dataEntries, label: "") setPieChartDataSetConfig(pichartDataSet: pichartDataSet) let pieChartData = PieChartData(dataSet: pichartDataSet) setPieChartDataConfig(pieChartData: pieChartData) pieChartView.data = pieChartData setDrawHoleState() pichartDataSet.colors = [MYCOlOR(r: 50, g: 161, b: 127, a: 1.0),MYCOlOR(r: 45, g: 90, b: 160, a: 1.0),MYCOlOR(r: 206, g: 89, b: 90, a: 1.0)] }
|
3.设置饼状图每一个块对应的数据的属性
1 2 3 4 5 6 7 8 9 10 11 12 13
| func setPieChartDataSetConfig(pichartDataSet: PieChartDataSet){ pichartDataSet.sliceSpace = 0 pichartDataSet.selectionShift = 1 pichartDataSet.xValuePosition = .insideSlice pichartDataSet.yValuePosition = .outsideSlice pichartDataSet.valueLinePart1OffsetPercentage = 0.85 pichartDataSet.valueLinePart1Length = 0.5 pichartDataSet.valueLinePart2Length = 0.4 pichartDataSet.valueLineWidth = 1 pichartDataSet.valueLineColor = UIColor.lightGray }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| func setPieChartDataConfig(pieChartData: PieChartData){ pieChartData.setValueFormatter(DigitValueFormatter()) pieChartData.setValueTextColor(UIColor.gray) pieChartData.setValueFont(UIFont.systemFont(ofSize: 10)) }
public class DigitValueFormatter: NSObject, IValueFormatter { public func stringForValue(_ value: Double, entry: ChartDataEntry, dataSetIndex: Int, viewPortHandler: ViewPortHandler?) -> String { let valueWithoutDecimalPart = String(format: "%.2f%%", value) return valueWithoutDecimalPart } }
|
5.最后是整个饼状图视图的属性设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| func setDrawHoleState(){ pieChartView.setExtraOffsets(left: 30, top: 0, right: 30, bottom: 0) pieChartView.dragDecelerationEnabled = false pieChartView.drawSlicesUnderHoleEnabled = true pieChartView.usePercentValuesEnabled = true pieChartView.chartDescription?.text = "本年度项目情况" pieChartView.chartDescription?.font = UIFont.systemFont(ofSize: 10) pieChartView.chartDescription?.textColor = UIColor.gray pieChartView.legend.maxSizePercent = 0.9 pieChartView.legend.formToTextSpace = 5 pieChartView.legend.font = UIFont.systemFont(ofSize: 10) pieChartView.legend.textColor = UIColor.gray pieChartView.legend.verticalAlignment = .bottom pieChartView.legend.form = .circle pieChartView.legend.formSize = 12 pieChartView.legend.orientation = .horizontal pieChartView.legend.horizontalAlignment = .center if pieChartView.isDrawHoleEnabled { pieChartView.drawHoleEnabled = true pieChartView.holeRadiusPercent = 0.3 pieChartView.holeColor = UIColor.white pieChartView.transparentCircleRadiusPercent = 0.32 pieChartView.transparentCircleColor = MYCOlOR(r: 210, g: 145, b: 165, a: 0.3) pieChartView.drawCenterTextEnabled = false pieChartView.centerText = "平均库龄" } pieChartView.setNeedsDisplay() }
|
柱状图

柱状图和饼状图稍微不一样,我这里是做的3个一组的柱状图,看了一下午的demo终于稍微明白到底咋搞的老。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| var chartView:BarChartView = { let chartView = BarChartView(frame: CGRect.zero) chartView.setExtraOffsets(left: 10, top: 10, right: 30, bottom: 0) chartView.dragEnabled = false chartView.setScaleEnabled(false)
chartView.chartDescription?.enabled = false let xAxis = chartView.xAxis xAxis.labelPosition = .bottom xAxis.labelFont = .systemFont(ofSize: 10) xAxis.valueFormatter = DayAxisValueFormatter() let leftAxis = chartView.leftAxis leftAxis.labelFont = .systemFont(ofSize: 10) leftAxis.labelCount = 8 leftAxis.valueFormatter = MoneyAxisValueFormatter() leftAxis.labelPosition = .outsideChart leftAxis.axisMinimum = 0 chartView.rightAxis.enabled = false return chartView }()
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public class DayAxisValueFormatter: NSObject, IAxisValueFormatter { public func stringForValue(_ value: Double, axis: AxisBase?) -> String { let days = Int(value) return String(format:"201\(7+days)年") } }
public class MoneyAxisValueFormatter: NSObject, IAxisValueFormatter { public func stringForValue(_ value: Double, axis: AxisBase?) -> String { let days = Int(value) + 1 return String(format:"\(days)¥") } }
|
3.设置柱状图的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| func setDataCount(_ count: Int, range: UInt32) { let groupSpace = 0.2 let barSpace = 0 let barWidth = 0.2 let randomMultiplier = range * 100 let startYear = 1 let block: (Int) -> BarChartDataEntry = { (i) -> BarChartDataEntry in return BarChartDataEntry(x: Double(i), y: Double(arc4random_uniform(randomMultiplier))) } let yVals1 = ([500,2,3,4]).map(block) let yVals2 = ([2,2,3,4]).map(block) let yVals3 = ([4,2,3,4]).map(block) let set1 = BarChartDataSet(values: yVals1, label: "项目数") set1.setColor(ZLGreenColor) let set2 = BarChartDataSet(values: yVals2, label: "总分") set2.setColor(MainColor()) let set3 = BarChartDataSet(values: yVals3, label: "平均分") set3.setColor(ZLRedColor) let data = BarChartData(dataSets: [set1, set2, set3]) data.setValueFont(.systemFont(ofSize: 10, weight: .light)) data.setValueFormatter(DigitValueFormatter()) data.barWidth = barWidth chartView.xAxis.axisMinimum = Double(startYear)
chartView.xAxis.axisMaximum = 5 data.groupBars(fromX: Double(startYear), groupSpace: groupSpace, barSpace: Double(barSpace)) chartView.data = data }
|