我使用以下方法显示我的情节的标签:
-(CPTLayer *)dataLabelForPlot:(CPTPlot *)plot recordIndex:(NSUInteger)index{
...
CPTTextLayer *label=[[CPTTextLayer alloc] initWithText:stringValue style:textStyle];
}
每个索引应返回标签
我知道可以使用以下方式向上或向下移动标签:
plot.labelOffset=10;
问题是:我怎样才能将标签向右移动一下? 我试着用
label.paddingLeft=50.0f;
但它不起作用。
答案 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是绘图记录中心的偏移量。
我写了一篇关于此的文章:
我创建的使用此解决方案的演示项目可在以下位置找到:
答案 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;
这可能会导致我不知道的后果,但到目前为止似乎有效。