我正在实施条形图,并且在理解两种方法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和例子,对我来说并不清楚。有人可以解释一下吗?
答案 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;
}