2012-04-26 4 views
2

Я использую следующий метод для отображения метки для моего участка:Как переместить вправо этикетку Core Plot?

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

, который для каждого индекса должен вернуть метку

Я знаю, что можно переместить метку вверх или вниз с помощью:

plot.labelOffset=10; 

Вопрос в следующем: как я могу немного поместить метку вправо? Я пытался использовать

label.paddingLeft=50.0f;

, но он не работает.

ответ

1

Добавление отступов, как в вашем примере, действительно работает, но, возможно, не так, как вы ожидаете. Разметки и штриховые графики центрируют метку над каждой точкой данных (с положительным смещением). Отступы делают всю этикетку более широкой, поэтому при центрировании тест появляется сбоку. Трудно контролировать, особенно если тексты ярлыков различной длины.

Существует нерешенный вопрос для решения этой проблемы (issue 266). Никаких гарантий, когда это будет исправлено, но это то, что мы смотрим.

+0

Такая же проблема. Хотите вытеснить ярлык слева. Есть ли какое-то решение сейчас? –

+1

Увеличьте 'paddingRight' внутри текстового слоя метки. –

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

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; 

Там могут быть последствия этого, что я не в курсе, но это, кажется, работает до сих пор.

Смежные вопросы