我试图在 ios 上用 core-plot 绘制一个甜甜圈饼图,一个图表在另一个图表中。每个切片具有相同的宽度,但切片是彩色编码的。我试图在每个切片的中心放置一个彩色点,但我不知道如何让点的位置正确。
我已经设法使用饼图的 labelOffset 属性使它们大致居中。(目前我使用 -35 的标签偏移量,由反复试验确定)。但是我无法让它们完全居中,并且在最里面的图中,它们最终可能会离得足够远,以至于它们位于错误的切片中。我尝试设置文本层的 rectAnchor 属性和填充,但似乎都没有任何效果。
创建绘图的代码:
CGFloat startAngle = [self degreesToRadians:90 + ((360 / [self.dangerRoseData numberOfSectors]) /2.0)];
NSInteger levels = [self.dangerRoseData numberOfLevels];
for(int i = 0; i < levels; i++){
CGFloat radiusD = (i + 1.0)/ levels;
CGFloat radius = MIN(radiusD * (graphHostingView.frame.size.height - 2 * graph.paddingLeft) / 2.8,
radiusD * (graphHostingView.frame.size.width - 2 * graph.paddingTop) / 2.8);
CPTPieChart *lastPie = [plots lastObject];
CGFloat innerRadius;
if(lastPie != nil)
innerRadius = lastPie.pieRadius;
else
innerRadius = 0;
CPTPieChart *piePlot = [[CPTPieChart alloc] init];
piePlot.backgroundColor = [UIColor clearColor].CGColor;
piePlot.dataSource = self;
piePlot.delegate = self;
piePlot.pieRadius = radius;
piePlot.pieInnerRadius = innerRadius;
piePlot.identifier = [self.dangerRoseData nameForLevel:i];
piePlot.borderLineStyle = lineStyle;
piePlot.startAngle = startAngle;
piePlot.sliceDirection = CPTPieDirectionClockwise;
piePlot.labelOffset = -35;//brute force trial and error
piePlot.labelRotationRelativeToRadius = NO;//new property after 1.0
[graph addPlot:piePlot];
[plots addObject:piePlot];
}
对于标签:
-(CPTLayer *)dataLabelForPlot:(CPTPlot *)plot recordIndex:(NSUInteger)index{
....
CPTMutableTextStyle *textStyle = [[CPTMutableTextStyle alloc] init];
textStyle.color = color;
textStyle.fontSize = 36;
CPTTextLayer *label = [[CPTTextLayer alloc] initWithText:@"•" style:textStyle];
return label;
}
我尝试更新到最新版本的 core-plot,它为 CPTPiePlot labelRotationRelativeToRadius 添加了一个新属性,这似乎应该是这个问题的答案,但事实并非如此。使用新版本,我无法将点定位在靠近正确位置的任何位置。
我错过了定位标签的东西吗?
我是否使用完全错误的方法将点放在切片中?