CorePlot: метки данных с несколькими слоями

Я пытаюсь создать график с текстом и изображением в качестве меток данных для каждой точки. Код, который я использую, выглядит так:

//Point symbol
NSInteger symbolIndex = interval.symbolIndex;
UIImage *img = [Common getPointSymbol:symbolIndex];
CGRect imageRect = CGRectMake(0, 0 , 60, 50);
CPTBorderedLayer * imageLayer = [[CPTBorderedLayer alloc] initWithFrame:imageRect];
imageLayer.fill = [CPTFill fillWithImage:[CPTImage imageWithCGImage:[img CGImage] scale:img.scale]];

//Point text
CPTMutableTextStyle *dataLabelTextStyle = [CPTMutableTextStyle textStyle];
dataLabelTextStyle.color    = [CPTColor blackColor];
dataLabelTextStyle.fontSize = 12.0f;
dataLabelTextStyle.fontName = @"Helvetica";
CPTTextLayer *textLayer = [[CPTTextLayer alloc] initWithText:point.title style:dataLabelTextStyle];
[imageLayer addSublayer:textLayer];

return imageLayer;

Это хорошо работает для точек данных, которые изначально видны на графике, но для точек, которые находятся за пределами начальной области графика, рисуются только изображения символов. Если уменьшить масштаб и принудительно перерисовать график, снова появятся оба слоя. Та же проблема возникает, если изменить порядок слоев на противоположный, а затем отрисовывается только текстовый слой. По сути, кажется, что подслои не отображаются, если они начинаются за пределами графика.

Это основная сюжетная ошибка? Можно ли объединить слои в один, чтобы смягчить эту проблему?

Благодарен за помощь!


person Setomidor    schedule 06.08.2012    source источник


Ответы (1)


CPTTextLayer является подклассом CPTBorderedLayer. Вы можете добавить фоновую заливку к текстовому слою, а затем использовать свойства заполнения, чтобы расположить текст внутри слоя.

person Eric Skroch    schedule 07.08.2012
comment
Кажется, это работает, но создает некоторые новые проблемы; если текст шире изображения, он будет ограничен (и обернут) рамками изображения. Можно ли использовать отступы для настройки положения заливки при использовании большей границы слоя? - person Setomidor; 07.08.2012
comment
На самом деле, при изменении свойств заполнения слоя фоновая заливка соответственно растягивается или сжимается, так что это не работает. - person Setomidor; 07.08.2012
comment
Поведение отрисовки подслоя является побочным эффектом того, как Core Plot обрезает дочерние слои. Сообщите об этом в системе отслеживания ошибок Core Plot, и мы рассмотрим в исправление. - person Eric Skroch; 08.08.2012
comment
Еще раз спасибо за помощь, Эрик, я сообщу об этом в системе отслеживания проблем :) - person Setomidor; 08.08.2012