ios图表中的圆角条

Posted

技术标签:

【中文标题】ios图表中的圆角条【英文标题】:Rounded bars in ios Charts 【发布时间】:2016-06-20 10:31:00 【问题描述】:

我使用ios-Charts 中的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)

我一直在寻找像set1.barCornerRadius 这样的属性来设置,但我没有找到任何东西。

这是我所拥有的

这是我需要的

【问题讨论】:

***.com/questions/25476139/… ? 没有@oren,条形图由 BarChartView 直接管理。默认情况下,它们是平方的like these,我不知道如何圆角。 好吧,对不起……我只是想,这毕竟是一个UIView,所以也许可以使用它的层…… 查看github.com/danielgindi/Charts/issues/1066。有demo代码,可以先试试 【参考方案1】:

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

然后有if-statement 用于堆叠和非堆叠条,选择您的情况并删除:

context.fill(barRect)

而不是它添加:

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

context.drawPath(using: .fill)

【讨论】:

很好的答案.. 比采取另一个叉子要好得多:-) 我试图覆盖drawDataSet,但由于fileprivate 保护级别,我收到了很多错误,即属性无法访问。我是否必须将它们(及其初始化方法)复制到我的子类中,还是有更好的解决方案? 我在我的文件中实现了你的代码,但是这个文件没有被调用,那是什么问题? 如果你只想圆上角: let bezierPath = UIBezierPath(roundedRect:barRect,byRoundingCorners:[.topRight, .topLeft],cornerRadii: CGSize(width: 5, height: 5)) 如果您有困惑,请替换第 434 行【参考方案2】:

如果您不想等待 this pull request 合并到原始库中,那么我在几个项目中使用了一个可行的解决方案。

这个工作示例基于我之前在互联网上收集的所有数据。它从今天开始有效,但在使用前您必须采取一些预防措施。

要使其正常工作,您只需替换整个 BarChartRenderer.swift 文件 with this one。

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

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

这是我得到的最终结果:

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

【讨论】:

【参考方案3】:

目前似乎不支持此功能,但is under development。同时看看this pull request。

【讨论】:

不,链接错误。正确的是github.com/danielgindi/Charts/issues/1066【参考方案4】:

我们可以让圆角成为边缘

    您必须在 Charts 库中进行更改,转到 BarchartRenderer.swift 并且需要解锁文件

    第 434 行注释/删除它。

    在下面添加这个代码

    让 bezierPath = UIBezierPath(roundedRect: barRect,cornerRadius:3.2)

    context.addPath(bezierPath.cgPath)

    context.drawPath(使用:.fill)

请找到屏幕

【讨论】:

以上是关于ios图表中的圆角条的主要内容,如果未能解决你的问题,请参考以下文章

android 圆角边框 阴影边框怎么设置

圆角进度条,带数字居中显示的圆角进度条

图像视图中的选择性圆角 - iOS

wpf窗体设置阴影后,窗体圆角就会有阴影颜色,圆角就失效了,如何解决啊?求解

android ProgressBar 进度条的进度两端是圆角的方法

如何在 Xamarin.iOS 中绘制圆角矩形?