我编写了以下代码来显示条形图注释。显示注释但具有意外的对齐/位置。 CPTextLayer的文本显示在框架的左上角。我试图在中心显示它。我使用了CPTextLayer的背景图像作为背景颜色。请查看代码 - (symbolTextAnnotation是在接口中解除的CPLayerAnnotation对象)
-(void)barPlot:(CPBarPlot *)plot barWasSelectedAtRecordIndex:(NSUInteger)index
{
CPXYGraph* graph = (CPXYGraph*)plot.graph;
NSNumber *value = [self numberForPlot:plot field:CPBarPlotFieldBarTip recordIndex:index];
if ( symbolTextAnnotation ) {
[graph.plotAreaFrame.plotArea removeAnnotation:symbolTextAnnotation];
symbolTextAnnotation = nil;
}
// Setup a style for the annotation
CPMutableTextStyle *hitAnnotationTextStyle = [CPMutableTextStyle textStyle];
hitAnnotationTextStyle.color = [CPColor whiteColor];
hitAnnotationTextStyle.fontSize = 9.0f;
hitAnnotationTextStyle.fontName = @"Helvetica-Bold";
// Determine point of symbol in plot coordinates
NSNumber *x = [NSNumber numberWithInt:index+1];
NSNumber *y = [NSNumber numberWithInt:0];
NSArray *anchorPoint = [NSArray arrayWithObjects:y, x, nil];
// Add annotation
// First make a string for the y value
NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
[formatter setMaximumFractionDigits:2];
NSString *yString = [formatter stringFromNumber:value];
// Now add the annotation to the plot area
UIImage *annotationBG = [UIImage imageNamed:@"annotation-bg.png"];
CPTextLayer *textLayer = [[[CPTextLayer alloc] initWithText:yString style:hitAnnotationTextStyle] autorelease];
textLayer.backgroundColor = [UIColor colorWithPatternImage:annotationBG].CGColor;
textLayer.frame = CGRectMake(0, 0, annotationBG.size.width, annotationBG.size.height);
symbolTextAnnotation = [[CPPlotSpaceAnnotation alloc] initWithPlotSpace:plot.plotSpace anchorPlotPoint:anchorPoint];
symbolTextAnnotation.contentLayer = textLayer;
symbolTextAnnotation.displacement = CGPointMake(-18.0f, 3.0f);
[graph.plotAreaFrame.plotArea addAnnotation:symbolTextAnnotation];
}
答案 0 :(得分:2)
CPTextLayer
根据文字大小调整自身的大小。设置文本后调整大小会导致绘图问题。你可以制作另一个CPLayer,设置你的背景,让你的CPTextLayer成为一个子图层,然后根据需要定位它。
displacement
属性与contentAnchorPoint
属性一起使用来定位注释。 contentAnchorPoint是内容层的核心动画定位点。位移是该点与注释的anchorPlotPoint的像素偏移量。例如,如果希望注释以anchorPlotPoint为中心,请将contentAnchorPoint设置为CGPointMake(0.5, 0.5)
,将位移设置为CGPointZero
。