Skip to main content
 首页 » 数据库

ios之JBChartView 如何给每个柱添加标签 ( swift )

2024年01月01日117傻小

我正在使用 JBChartView 库在我的 iOS 应用程序中绘制条形图。每个栏都应该有一个标识符,显示在栏的底部。 我尝试使用附加标签定义自定义 barView,但不知道如何相对于栏放置标签。

代码如下:

func barChartView(barChartView: JBBarChartView!, barViewAtIndex index: UInt) -> UIView! { 
    let barView = UIView() 
 
    // setting up the bar 
    let bar: Float = chartData[Int(index)] 
    var barColor = UIColorFromRGB(0xE8E8E8) 
    if bar >= 1 { barColor = UIColorFromRGB(0xFF6259) } 
    if bar > 33 { barColor = UIColorFromRGB(0xFFC02F) } 
    if bar > 66 { barColor = UIColorFromRGB(0x28CA41) } 
    barView.backgroundColor = barColor 
 
    // setting up the label 
    var label = UILabel() 
    label.textAlignment = NSTextAlignment.Center 
    label.textColor = barColor 
    label.text = NSString(format: "%.0f", bar) 
    barview.addSubview(label) 
 
    return barView 
} 

非常感谢您的帮助!

请您参考如下方法:

好吧,这很尴尬:标签和栏的颜色相同,所以标签一直都在那里。

最终代码(经过改进并带有额外的数据标签):

func barChartView(barChartView: JBBarChartView!, barViewAtIndex index: UInt) -> UIView! { 
    let barView = BarChartBarView() 
 
    let bar: Float = chartData[Int(index)] 
    var barColor = UIColorFromRGB(0xE8E8E8) 
    if bar >= 1 { barColor = UIColorFromRGB(0xFF6259) } 
    if bar > 33 { barColor = UIColorFromRGB(0xFFC02F) } 
    if bar > 66 { barColor = UIColorFromRGB(0x28CA41) } 
    barView.backgroundColor = barColor 
 
    barView.dataLabel.text = NSString(format: "%.0f", bar) 
    barView.legendLabel.text = chartLegend[Int(index)] 
 
    return barView 
} 

类 BarChartBarView: UIView {

let labelFont = UIFont(name:"Raleway-Thin", size:8.0) 
var padding = CGFloat(0) 
var barWidth = CGFloat(27) 
var dataLabel = UILabel() 
var legendLabel = UILabel() 
var legendLabelWidth = CGFloat(50) 
var labelHeight = CGFloat(27) 
 
override convenience init() { 
    self.init(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) 
} 
 
 
override init(frame: CGRect) { 
    super.init(frame: frame) 
 
    self.backgroundColor = UIColorFromRGB(0xE8E8E8) 
 
    // setting up data Label 
    dataLabel.frame = CGRectMake(0, 0, barWidth, labelHeight) 
    dataLabel.textAlignment = NSTextAlignment.Center 
    dataLabel.textColor = UIColor.whiteColor() 
    dataLabel.font = labelFont 
    self.addSubview(dataLabel) 
 
    // setting up legend Label 
    legendLabel.frame = CGRectMake(0, self.bounds.height, legendLabelWidth, labelHeight) 
    legendLabel.textAlignment = NSTextAlignment.Center 
    legendLabel.textColor = UIColor.blackColor() 
    legendLabel.font = labelFont 
    self.addSubview(legendLabel) 
} 
 
required init(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 
 
override func layoutSubviews() { 
    let xOffset = (self.barWidth - self.legendLabelWidth) / 2 
    let yOffset:CGFloat = self.bounds.height 
    let width = self.legendLabelWidth 
    let height = self.labelHeight 
 
    self.legendLabel.frame = CGRectMake(xOffset, yOffset, width, height) 
}