Core-plot を使用して iOS でドーナツ円グラフを描画しようとしています。各スライスの幅は同じですが、スライスは色分けされています。各スライスの中央に色付きのドットを配置しようとしていますが、ドットの位置を正しくする方法がわかりません。
円グラフの 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;
}
CPTPiePlot labelRotationRelativeToRadius に新しいプロパティを追加する core-plot の最新バージョンに更新しようとしましたが、これはこの問題に対する答えであるように思われますが、そうではありません。新しいバージョンでは、ドットを正しい場所の近くに配置することができません。
ラベルの配置に何か欠けていますか?
スライスにドットを配置するために完全に間違ったアプローチを使用していますか?