Core Plot CPTextLayer:文本与背景图像对齐作为背景颜色

时间:2011-05-04 19:43:01

标签: iphone core-plot

我编写了以下代码来显示条形图注释。显示注释但具有意外的对齐/位置。 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];    
}

1 个答案:

答案 0 :(得分:2)

CPTextLayer根据文字大小调整自身的大小。设置文本后调整大小会导致绘图问题。你可以制作另一个CPLayer,设置你​​的背景,让你的CPTextLayer成为一个子图层,然后根据需要定位它。

displacement属性与contentAnchorPoint属性一起使用来定位注释。 contentAnchorPoint是内容层的核心动画定位点。位移是该点与注释的anchorPlotPoint的像素偏移量。例如,如果希望注释以anchorPlotPoint为中心,请将contentAnchorPoint设置为CGPointMake(0.5, 0.5),将位移设置为CGPointZero