我正在实现一个条形图,但在理解 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 中记录信息时,fieldEnum 只有 0 和 1。

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

最佳答案

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

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

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

然后你可以像这样实现委托(delegate)方法,
-(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;
}

关于ios - 了解 numberForPlot : and numberOfRecordsForPlot: Core Plot,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22169195/

10-13 06:34