我需要在散射图中的绘图符号处显示图像。现在我正在使用CPTPlotSymbol在图表上绘制符号。但我所能得到的只是预定义的对象。例如。 ellipsePlotSymbol,dashPlotSymbol,trianglePlotSymbol。
但我需要改为绘制图像。
你能帮助我实现这个目标吗?非常感谢。
答案 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以绘制图像。
可能有一种我不知道的直接方法。