【问题标题】:Core-Plot: Data labels for bar plots (2 plots, 2 sets of labels)?核心图:条形图的数据标签(2 个图,2 组标签)?
【发布时间】:2011-10-16 00:37:04
【问题描述】:

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

这些图有单独的标识符:“条形图 1”和“条形图 2”。我可以在“numberOfRecordsForPlot”和“numberForPlot”方法中使用条件 if 语句,但在“dataLabelForPlot”方法中失败,错误提示“label”是未使用的变量。看到它是在条件语句中定义的,我觉得很奇怪。

我的代码如下所示:

#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];
}

【问题讨论】:

    标签: core-plot labels cptbarplot


    【解决方案1】:

    您已在每个 if 和 else 块中声明 label,使其成为这些块的本地。将变量声明移到 if 语句之前。

    CPTTextLayer *label;
    if (plot.identifier == @"Bar Plot 1") {
        label = ...;
    }
    else {
        label = ...;
    }
    return [label autorelease];
    

    【讨论】:

    • 太棒了,埃里克。我早些时候尝试过,但没有运气。现在,有了你的好业力,它就起作用了。谢谢一百万。
    【解决方案2】:

    plot.identifier == @"Bar Plot 1"

    应该是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多