首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >核心图:条形图的数据标签(2个图,2组标签)?

核心图:条形图的数据标签(2个图,2组标签)?
EN

Stack Overflow用户
提问于 2011-10-16 08:37:05
回答 2查看 3.1K关注 0票数 3

在我的iPhone应用程序中,我有一个带有两个独立条形图的视图。每个图都有不同数量的数据元素。我想用适当的数据标记每个图中的每个条形图,但显然"dataLabelForPlot“方法只允许”CPTTextLayer“的一个实例。我想让CPTTextLayer成为绘图及其数据的函数。

绘图有不同的标识符:“条形图1”和“条形图2”。我可以在"numberOfRecordsForPlot“和"numberForPlot”方法中使用条件if语句,但它在"dataLabelForPlot“方法中失败了,错误显示"label”是一个未使用的变量。在我看来非常奇怪,因为它是在条件语句中定义的。

我的代码如下所示:

代码语言:javascript
复制
#pragma mark Plot Data Source Methods
-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot {
if (plot.identifier == @"Bar Plot 1") {
    return 5; }
  else { return 4; }
}
-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index {
    NSDecimalNumber *num = nil;
if (plot.identifier == @"Bar Plot 1") {
    switch ( fieldEnum ) {
        case CPTBarPlotFieldBarLocation:
            num = (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:index];
            break;
        case CPTBarPlotFieldBarTip:               
            num = (NSDecimalNumber *)[dataTemp1 objectAtIndex:index];                
            break;
    }
}
else {
    switch ( fieldEnum ) {
        case CPTBarPlotFieldBarLocation:
            num = (NSDecimalNumber *)[NSDecimalNumber numberWithUnsignedInteger:index];
            break;
        case CPTBarPlotFieldBarTip:                
            num = (NSDecimalNumber *)[dataTemp2 objectAtIndex:index];
            break;
    }
}
    return num;
}

-(CPTLayer *)dataLabelForPlot:(CPTPlot *)plot recordIndex:(NSUInteger)index {
  if (plot.identifier == @"Bar Plot 1") {
    CPTTextLayer *label = [[CPTTextLayer alloc] initWithText:[NSString stringWithFormat:@"%@", [dataTemp1 objectAtIndex:index]]]; 
    }
  else { CPTTextLayer *label = [[CPTTextLayer alloc] initWithText:[NSString stringWithFormat:@"%@", [dataTemp2 objectAtIndex:index]]]; }    
    CPTMutableTextStyle *textStyle = [label.textStyle mutableCopy];

    textStyle.color = [CPTColor redColor];
    label.textStyle = textStyle;
    [textStyle release];
return [label autorelease];
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-16 09:49:53

您已经在每个if和else块中声明了label,使其对于这些块来说是本地的。将变量声明移到if语句之前。

代码语言:javascript
复制
CPTTextLayer *label;
if (plot.identifier == @"Bar Plot 1") {
    label = ...;
}
else {
    label = ...;
}
return [label autorelease];
票数 3
EN

Stack Overflow用户

发布于 2011-12-30 17:49:52

plot.identifier == @"Bar Plot 1"

应该是:

[plot.identifier isEqualToString: @"Bar Plot 1"

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

https://stackoverflow.com/questions/7781611

复制
相关文章

相似问题

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