1

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

但我需要改为绘制图像。

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

在此处输入图像描述

4

3 回答 3

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

现在,在散点图图形文件中,我使用以下委托方法返回图像

- (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;        
}

享受编码.... :)

于 2012-07-07T07:45:35.347 回答
3

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

于 2012-07-06T23:39:49.740 回答
1

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

可能有一种我不知道的直接方法可以做到这一点。

于 2012-07-06T12:51:39.540 回答