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图表中的圆角条的主要内容,如果未能解决你的问题,请参考以下文章
wpf窗体设置阴影后,窗体圆角就会有阴影颜色,圆角就失效了,如何解决啊?求解