0

我对 CorePlot 库还很陌生。在我们的一个应用程序中,我们使用 CorePlot 绘制图表的条形图。我们还为图表中的每个条形图显示数据标签。我labelOffset用来设置它在条形图中的位置(即labelOffset= -10.0)但是,当图表中的一个条形图太小而无法容纳条形内的数据标签时,我正在设置labelOffset = 10.0,以便它可以出现在上方该栏默认。

但是,我在 CPTPlot 上看到了这种奇怪的行为,其中它在条形图上绘制了两次数据标签。这是一个屏幕截图:

在此处输入图像描述

这是一个代码片段:

    -(CPTTextLayer *)dataLabelForPlot:(CPTPlot *)plot recordIndex:(NSUInteger)index
    {
    plot.labelFormatter = nil;
    plot. labelTextStyle = nil;
    if (self.showValuesAsPlotLabels)
    {
if (self.showValuesAsPlotLabels)
{
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];

    [numberFormatter setGeneratesDecimalNumbers:NO];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter setMaximumFractionDigits:2];
    [numberFormatter setMinimumFractionDigits:2];

    CGFloat yValue = [self.chartData[index][1] floatValue];
    //return [NSString stringWithFormat:@"%f", yValue];
    NSString *labelStr = [numberFormatter stringFromNumber:@(yValue)];
    /* Check to see how tall is bar chart so that we can accordingly position data label */
    CGFloat yBaseOffsetValue = self.yAxisIntervalLength;
    CGFloat compareValue = (yBaseOffsetValue * self.divisor);
    UIColor *dataLabelColor;
    float dataLabelOffset = -10.0f;
    if (yValue > compareValue) {
        dataLabelColor = [UIColor whiteColor];
        plot.labelOffset = dataLabelOffset;
    } else {
        dataLabelColor = [UIColor blackColor];
        plot.labelOffset = (0.0f - dataLabelOffset);
    }
       return [[CPTTextLayer alloc] initWithText:labelStr style:[CPTTextStyle textStyleWithAttributes:@{NSForegroundColorAttributeName: dataLabelColor}]];
  }

  if (self.plotLabels == nil || self.plotLabels.count < index)
  {
       return nil;
  }

   NSString *identifier = (self.plotLabels)[index];

   CPTTextLayer *label = [[CPTTextLayer alloc] initWithText:identifier];

   return label;
}

我在这里错过了什么或做错了什么?

提前致谢。

编辑 在 Eric 的建议之后,我尝试使用plot.identifier来检查特定的 yValues,然后相应地返回labelOffsettextStyledataLabel。但是,我现在在条形图上看到以下行为: 在此处输入图像描述

我在想,dataLabelForPlot:recordIndex:是不是在使用相同的实例CPTTextLayer?有没有一种方法可以CPTTextLayer让每个不同的实例都有单独的实例CPTBarPlot


谢谢

4

0 回答 0