了解numberForPlot:和numberOfRecordsForPlot:Core Plot

时间:2014-03-04 10:24:04

标签: ios objective-c graph core-plot

我正在实施条形图,并且在理解两种方法numberForPlot:field:recordIndex:numberOfRecordsForPlot

时遇到问题

我目前有

-(NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot
{
    return 4;
}

-(NSNumber *)numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx {
    switch (idx) {
        case 0:
            return @1;
            break;
        case 1:
            return @2;
            break;
        case 2:
            return @3;
            break;
        case 3:
            return @4;
            break;
        default:
            return @0;
            break;
    }
}

按预期生成图表。当我更改说@4@5时,它会显示最后一个条,旁边有一个空条形空间。如果我根据numberOfRecordsForPlot为4个条目中的每个条目绘制x和y位置,这是有道理的,但是当我在numberForPlot中记录信息时,它只有0& 1为fieldEnum。

我看过doco和例子,对我来说并不清楚。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:4)

主要问题是该委托方法的fieldEnum没有按照您的想法行事。它的值为CPTBarPlotFieldBarLocation('x'轴位置)或CPTBarPlotFieldBarTip(条高),因此这些应该是switch语句中使用的情况。 idx指的是特定的栏。

在这里,我将条形的高度放在名为plotData的数据源对象的属性中。

self.plotData = @[@(1), @(2), @(3), @(4)];

然后你可以像这样实现委托方法,

-(NSNumber*) numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx {

    switch ( fieldEnum ) {
        case CPTBarPlotFieldBarLocation:
            return @(idx);
            break;

        case CPTBarPlotFieldBarTip:
            return [plotData objectAtIndex:idx];
            break;

        default:
            break;
    }

    return nil;
}