在Core plot iOS中将散射图上的图像显示为绘图符号

时间:2012-07-06 12:33:09

标签: iphone xcode graph core-plot

我需要在散射图中的绘图符号处显示图像。现在我正在使用CPTPlotSymbol在图表上绘制符号。但我所能得到的只是预定义的对象。例如。 ellipsePlotSymbol,dashPlotSymbol,trianglePlotSymbol。

但我需要改为绘制图像。

你能帮助我实现这个目标吗?非常感谢。

enter image description here

3 个答案:

答案 0 :(得分:4)

尝试了一下之后得到了答案。

首先,我构建了一个自定义CPTLayer,并在其中使用了要填充的图像。

CustomImageForScatterPlot.h文件

 #import "CPTLayer.h"


 @interface CustomImageForScatterPlot : CPTLayer
 {    
     UIImage *_image;

 }
 -(id)initWithImage:(UIImage *)image;

 @end

CustomImageForScatterPlot.m文件

#import "CustomImageForScatterPlot.h"
#import "CPTLayer.h"

@implementation CustomImageForScatterPlot

-(void)dealloc{

    [_image release];
    [super dealloc];
}
-(id)initWithImage:(UIImage *)image{

    CGRect f = CGRectMake(0, 0, image.size.width, image.size.height);

    if (self = [super initWithFrame:f]) {

        _image = [image retain];
    }

    return self;

}

-(void)drawInContext:(CGContextRef)ctx{

    CGContextDrawImage(ctx, self.bounds, _image.CGImage);

}
@end

现在,在Scatter图表文件中,我使用以下委托方法返回图像

- (CPTLayer *)dataLabelForPlot:(CPTPlot *)plot recordIndex:(NSUInteger)index
{       
     CustomImageForScatterPlot* layer = [[CustomImageForScatterPlot alloc] initWithImage:[UIImage imageNamed:@"dots.png"]];
     layer.frame = CGRectMake(2, 0, 34, 6);

     return layer;        
}

享受编码.......)

答案 1 :(得分:3)

使用-symbolForScatterPlot:recordIndex:数据源方法,并为突出显示的点返回不同的符号。带有图像fill的标准矩形符号可以满足您的需求。

答案 2 :(得分:1)

我看到了两种不同的方法来实现这一点,第一种方法是使用其中一个默认符号,然后遍历数据并添加CPTPlotSpaceAnnotation,其中包含每个点包含图像的CPTLayer。另一种方法是创建CPTPlotSymbol的子类并覆盖renderAsVectorInContext以绘制图像。

可能有一种我不知道的直接方法。