首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JBChartView如何为每个栏添加标签?(Swift)

JBChartView如何为每个栏添加标签?(Swift)
EN

Stack Overflow用户
提问于 2015-03-13 01:44:18
回答 2查看 933关注 0票数 1

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

代码如下:

代码语言:javascript
复制
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
}

您的帮助将不胜感激!

EN

回答 2

Stack Overflow用户

发布于 2015-03-14 20:21:11

好吧,这是尴尬的:标签和酒吧有相同的颜色,所以标签一直在那里。

最后的代码(经过改进并添加了额外的数据标签):

代码语言:javascript
复制
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 {

代码语言:javascript
复制
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)
}

}

票数 2
EN

Stack Overflow用户

发布于 2015-04-29 05:10:41

@Armin我得到了实现以下方法的线索:

代码语言:javascript
复制
- (UIView *)barChartView:(JBBarChartView *)barChartView barViewAtIndex:(NSUInteger)index

来自阿明。因为尽管JawBone的JBBarChart库令人印象深刻,但他们的演示完全是使用代码完成的,而且乍看起来有点令人困惑。但是,我添加Label视图的方法与创建UIView、将UILabel作为子视图添加并返回它的方法相同。它看起来像这样:

代码语言:javascript
复制
- (UIView *)barChartView:(JBBarChartView *)barChartView barViewAtIndex:(NSUInteger)index {
    UIView *barView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 55, (CGFloat)chartData[(int)index])];
    if (index == 0) {
        [barView setBackgroundColor:[UIColor grayColor]];
    } else if (index == 1) {
        [barView setBackgroundColor:[UIColor redColor]];
    } else if (index == 2) {
        [barView setBackgroundColor:[UIColor orangeColor]];
    } else {
        [barView setBackgroundColor:[UIColor blueColor]];
    }

    int roomCount = (int)chartData[(int)index];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(2, 5.0f, 50.0f, 21.0f)];
    [label setTextAlignment:NSTextAlignmentCenter];
    [label setTextColor:[UIColor blackColor]];
    [label setFont:[UIFont fontWithName:@"Raleway-Thin" size:6.0]];
    [label setText:[NSString stringWithFormat:@"%d/56", roomCount]];

    [barView addSubview:label];
    return barView;
}

请考虑到chartData包含整数形式的我的数据。因此,我需要每个条形图的高度根据该整数在每个位置。

希望这个答案对外面的人有帮助,特别是在Objective-C中处理这个实现的人。

干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29016728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档