Поместите изображение позади моих ярлыков и перед моим графиком на графике основного графика. - PullRequest
0 голосов
/ 21 февраля 2012

Как я могу получить изображение за метками на моем графике.Мне удалось поместить изображение перед графиком:

   CPTPlotSpaceAnnotation *imageAnnotation;
    CGRect imageRect = CGRectMake(0, 0 , 480, 320);
    CPTBorderedLayer * ImageLayer = [[CPTBorderedLayer alloc] initWithFrame:imageRect];
    ImageLayer.fill = [CPTFill fillWithImage:[CPTImage imageWithCGImage:[[UIImage imageNamed:@"Overlay_3_digits.png"] CGImage]]];
    imageAnnotation = [[CPTPlotSpaceAnnotation alloc] initWithPlotSpace:plotSpace anchorPlotPoint:nil];
    imageAnnotation.contentLayer = ImageLayer;
    [graph addAnnotation:imageAnnotation];
    [graph addSublayer:ImageLayer];
    [newImagelLayer release];
    [imageAnnotation release];

, добавив изображение с помощью [graph insertSubLayer: ImageLayer ниже: y];не работает, это также ставит изображение перед графиками и осевыми метками.Надеюсь, кто-нибудь может мне помочь.

РЕДАКТИРОВАТЬ: я добавил скриншот из симулятора.Три черных прямоугольника должны быть перед моими графиками и позади моих этикеток.Ярлыки будут читаться легче.

Simulator screenshot of my graph

Я также отредактировал иерархию слоев из моего графика, поместив метки оси в первый индекс:

NSArray *chartLayers = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:CPTGraphLayerTypeAxisLabels],
                                                            [NSNumber numberWithInt:CPTGraphLayerTypePlots],
                                                            [NSNumber numberWithInt:CPTGraphLayerTypeMajorGridLines], 
                                                            [NSNumber numberWithInt:CPTGraphLayerTypeMinorGridLines],  
                                                            [NSNumber numberWithInt:CPTGraphLayerTypeAxisLines], 
                                                            [NSNumber numberWithInt:CPTGraphLayerTypeAxisTitles],

                                                            nil];
    graph.topDownLayerOrder = chartLayers; 

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

CPTAnnotationHostLayer *newHostLayer = [[CPTAnnotationHostLayer alloc]
                                    initWithFrame:CGRectMake(0, 0, 480, 220)];
    UIImage * annotationBG = [UIImage imageNamed:@"Overlay_3_digits.png"];    

    newHostLayer.backgroundColor = [UIColor colorWithPatternImage:annotationBG].CGColor;

Есть какие-нибудь идеи, как я могу поместить изображение трех черных треугольников сзади моих этикеток и перед графиками?

1 Ответ

0 голосов
/ 21 февраля 2012

Метод -addAnnotation: заботится об обновлении дерева слоев;Вы должны удалить свой звонок на -addSublayer:.

Хотите, чтобы изображение полностью заполнило фон позади графика?Если это так, просто установите fill на графике вместо того, чтобы делать аннотации.

graph.fill = [CPTFill fillWithImage:[CPTImage imageWithCGImage:[[UIImage imageNamed:@"Overlay_3_digits.png"] CGImage]]];

Чтобы поставить рамку за каждой меткой, вы можете использовать собственные метки.Создайте CPTBorderedLayer так же, как вы делали для аннотации.Добавьте CPTTextLayer с текстом метки в качестве подслоя окаймленного слоя.Сделайте граничный слой contentLayer пользовательской метки.Это должно устранить необходимость изменения topDownLayerOrder тоже.

...