如何向右移动标签Core Plot?

时间:2012-04-26 09:38:43

标签: xcode core-plot padding

我使用以下方法显示我的情节的标签:

-(CPTLayer *)dataLabelForPlot:(CPTPlot *)plot recordIndex:(NSUInteger)index{ 
 ... 
 CPTTextLayer *label=[[CPTTextLayer alloc] initWithText:stringValue style:textStyle];
 }

每个索引应返回标签

我知道可以使用以下方式向上或向下移动标签:

plot.labelOffset=10;

问题是:我怎样才能将标签向右移动一下? 我试着用

label.paddingLeft=50.0f;

但它不起作用。

3 个答案:

答案 0 :(得分:1)

在示例中添加填充确实有效,但可能不符合您的预期。散点图和条形图将标签置于每个数据点上方(带有正偏移)。衬垫使整个标签更宽,因此当居中时,测试显示在侧面。它很难控制,特别是如果标签文本的长度不同。

有一个未解决的问题需要解决这个问题(issue 266)。不能保证何时修复,但这是我们正在考虑的事情。

答案 1 :(得分:1)

我遇到了同样的问题并想出了一个不同的解决方案。

我决定使用CPTAxisLabel方法initWithContentLayer创建标签:

CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:labelStr  style:axisTextStyle];

CGSize textSize = [textLayer sizeThatFits];

// Calculate the padding needed to center the label under the plot record.
textLayer.paddingLeft = barCenterLeftOffset - textSize.width/2.0;

CPTAxisLabel *label = [[CPTAxisLabel alloc] initWithContentLayer:textLayer];

此处barCenterLeftOffset是绘图记录中心的偏移量。

我写了一篇关于此的文章:

http://finalize.com/2014/09/18/horizontal-label-positioning-in-core-plot-and-other-miscellaneous-topics/

我创建的使用此解决方案的演示项目可在以下位置找到:

https://github.com/scottcarter/algorithms

答案 2 :(得分:1)

您可以继承CPTTextLayer并包含偏移量。

@interface WPTextLayer : CPTTextLayer

@property (nonatomic) CGPoint offset;

@end

@implementation WPTextLayer

-(void)setPosition:(CGPoint)position
{
    CGPoint p = CGPointMake(position.x + self.offset.x, position.y + self.offset.y);
    [super setPosition:p];
}

然后使用:

WPTextLayer *tLayer = [[WPTextLayer alloc] initWithText:@"blah" style:textStyle];
tLayer.offset = CGPointMake(3, -3);
return tLayer;

这可能会导致我不知道的后果,但到目前为止似乎有效。