在numberOfRecordsForPlot:...
我有这段代码:
int count = [[optsDict objectForKey:@"Values"] count];
NSLog(@"pie count: %i", count);
return count;
它输出pie count: 4
因此(除非我误解)饼图中应该有4个段。
然后在numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index
我有这个:
double percentage = ((float)counter/(float)total)*100;
num = (NSDecimalNumber *)[NSDecimalNumber numberWithInt:(int)percentage];
NSLog(@"index: %i, percentage: %f", index, percentage);
NSLog(@"%@", num);
return num;
输出:
index: 0, percentage: 9.090909
9
index: 1, percentage: 9.090909
9
index: 2, percentage: 63.636364
63
index: 3, percentage: 18.181818
18
所以我假设(合理地)该函数为每个段运行一次,并为所有段返回一个数字!
然而,图表看起来像这样:
我不能告诉你其他的事情。这就是我所知道的,我对核心情节了解不多!
如果有任何帮助你可以给我,我会非常感激!
谢谢
答案 0 :(得分:1)
我玩你的价值观,我想我在你的代码中发现了问题。
尝试返回班级-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index
的{{1}}对象
NSNumber
我在CorePlot框架中包含的示例中对此进行了测试。首先,我尝试使用num = (NSNumber *)[NSNumber numberWithInt:(int)percentage];
return num;
初始化contentArray
数组:
NSNumbers
一切都很完美。然后我尝试使用NSMutableArray *contentArray = [NSMutableArray arrayWithObjects:[NSNumber numberWithInt:9.0909099], [NSNumber numberWithInt:9.0909099], [NSNumber numberWithInt:63.63636463], [NSNumber numberWithInt:18.181818], nil];
:
NSDecimalNumbers
我收到了你的双色图表。
希望这会帮助你=)
答案 1 :(得分:0)
您是否实施
- (CPTFill *)sliceFillForPieChart:(CPTPieChart *)pieChart recordIndex:(NSUInteger)index
在CPTPieChartDataSource协议中?由于各部分之间没有边界线,因此可能会使用相同的颜色绘制几个边界线。确保为每个索引返回不同颜色的CPTFill。
答案 2 :(得分:0)
答案 3 :(得分:0)
看起来你错过了第一和第二片。 numberOfRecordsForPlot
可以返回4,但在numberForPlot
中,某些代码返回nil
..我创建了一个带有您的值的新饼图,并且一切正常。请参阅下面的代码。
您还可以尝试查看-(CPLayer *)dataLabelForPlot:(CPPlot *)plot recordIndex:(NSUInteger)index
委托方法中每个切片的数据标签。如果你真的有4个切片,那么其中2个将放在同一个位置。下面的代码也是如此。
-(void) viewDidLoad{
NSMutableArray *contentArray = [NSMutableArray arrayWithObjects:[NSNumber numberWithInt:9], [NSNumber numberWithInt:9], [NSNumber numberWithInt:63], [NSNumber numberWithInt:18], nil];
self.dataForChart = contentArray;
// Add pie chart
CPPieChart *piePlot = [[CPPieChart alloc] init];
piePlot.dataSource = self;
piePlot.pieRadius = 100.0;
piePlot.identifier = @"Pie Chart 1";
piePlot.startAngle = M_PI;
piePlot.sliceDirection = CPPieDirectionClockwise;
piePlot.delegate = self;
[pieChart addPlot:piePlot];
[piePlot release];
}
#pragma mark -
#pragma mark Plot Data Source Methods
-(NSUInteger)numberOfRecordsForPlot:(CPPlot *)plot{
return [self.dataForChart count];
}
-(NSNumber *)numberForPlot:(CPPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)index {
if ( index >= [self.dataForChart count] ) return nil;
if ( fieldEnum == CPPieChartFieldSliceWidth ) {
return [self.dataForChart objectAtIndex:index];
}
else {
return [NSNumber numberWithInt:index];
}
}
-(CPLayer *)dataLabelForPlot:(CPPlot *)plot recordIndex:(NSUInteger)index {
CPTextLayer *label = [[CPTextLayer alloc] initWithText:[NSString stringWithFormat:@"%lu", index]];
label.textStyle.color = [CPColor lightGrayColor];
return [label autorelease];
}