ios图表中的圆形条形图

lif*_*foo 7 ios swift ios-charts

我使用ios-Charts创建了一个BarChart BarChartView,但我无法弄清楚如何在条形图上添加圆角.

这是我正在使用的代码:

let barChart: BarChartView
//...
var xVals = [String]()
var yVals = [BarChartDataEntry]()
//...

let set1 = BarChartDataSet(yVals: yVals, label: "Label")

set1.drawValuesEnabled = false
set1.highlightLineWidth = 3
set1.colors = [UIColor.whiteColor()]

barChart.data = BarChartData(xVals: xVals, dataSet: set1)
Run Code Online (Sandbox Code Playgroud)

我找了一个喜欢set1.barCornerRadius设置的房产,但我没找到任何东西.

这是我有的:

平方吧

这就是我需要的:

圆棒

key*_*eyv 13

BarChartRenderer.swift你可以修改open func drawDataSet(context: CGContext, dataSet: IBarChartDataSet, index: Int)

然后是if-statement堆叠和非堆叠条,选择你的情况并删除:

context.fill(barRect)
Run Code Online (Sandbox Code Playgroud)

而不是它添加:

let bezierPath = UIBezierPath(roundedRect: barRect, cornerRadius: %YOUR_CORNER_RADIUS%)
context.addPath(bezierPath.cgPath)

context.drawPath(using: .fill)
Run Code Online (Sandbox Code Playgroud)

  • 我试图覆盖 `drawDataSet`,但由于 `fileprivate` 保护级别,我遇到了许多属性无法访问的错误。我是否必须将它们(及其 init 方法)复制到我的子类中,还是有更好的解决方案? (2认同)
  • 我在我的文件中实现了你的代码,但是这个文件没有被调用,那么问题是什么? (2认同)
  • 如果您只想圆化上角: let bezierPath = UIBezierPath(roundedRect:barRect,byRoundingCorners:[.topRight, .topLeft],cornerRadii: CGSize(width: 5, height: 5)) (2认同)

Ser*_*yov 7

如果您不想等待这个拉取请求被合并到原始库中,那么我在几个项目中使用了一个可行的解决方案。

这个工作示例基于我之前在 Internet 上收集的所有数据。它从今天开始工作,但在使用它之前你必须做一些预防措施。

为了使它的工作,所有你需要做的是更换整个BarChartRenderer.swift文件与这一个

首先,拥有原始文件的备份副本。然后,确保每次更新 Charts CocoaPod 时都替换该文件,否则该文件将被覆盖。

最后,要控制图表的角半径,只需将 更改barCornerRadius = CGFloat(5.0)为您想要的任何值。

这是我得到的最终结果:

在此处输入图片说明

替换文件后,请确保清理 Xcode 的构建文件夹,然后重新编译项目以使更改立即生效。


lif*_*foo 0

目前似乎不支持此功能,但正在开发中。同时看看这个拉取请求