1

我正在尝试使用类方法在 Core Plot (iOS) 上制作自定义绘图符号:

+(CPPlotSymbol *)customPlotSymbolWithPath:(CGPathRef)aPath

尽管我一直在阅读有关创建的苹果文档,但我在这个特定主题上只能找到有限的帮助,但CGPathRef无法使自定义符号正常工作。我的最终目标是创建如下符号:

在此处输入图像描述 在此处输入图像描述

有些符号需要有红色的内圈和一些蓝色的,有些根本不需要外圈(在这种情况下我使用ellipsePlotSymbol没有问题)。

我知道我可以“作弊(!)”并且只使用填充rectanglePlotSymbol或类似的背景图像,但我真的很想在代码中执行此操作,因此我不必每次需要新颜色时都创建不同的图像等。

我已经开始了,但请专家完成/帮助解决这个问题!谢谢你。

// Set up Risk Plot and add to Graph
self.riskValuesPlot = [[CPTScatterPlot alloc] init];
self.riskValuesPlot.dataSource = self;
self.riskValuesPlot.identifier = @"Risk Values";
CPTColor *riskPlotColor = [CPTColor colorWithComponentRed:49.0/255.0 green:82.0/255.0 blue:151.0/255.0 alpha:1.0];
[graph addPlot:self.riskValuesPlot toPlotSpace:plotSpace];

// Risk Values Line and Point Style
CPTMutableLineStyle *riskLineStyle = [self.riskValuesPlot.dataLineStyle mutableCopy];
riskLineStyle.lineWidth = 0.0f;
self.riskValuesPlot.dataLineStyle = riskLineStyle;

// Trying to draw the outer circle...help required
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 0.0f, 0.0f);
CGPathAddArc(path, NULL, 0.0f, 0.0f, 3.0f, 0, M_PI * 180, YES);
CPTPlotSymbol *riskSymbol = [CPTPlotSymbol customPlotSymbolWithPath:path];
CGPathRelease(path);

// Draw inner circle here
// Set path color then draw circle path with fill?
...

CPTMutableLineStyle *riskSymbolLineStyle = [CPTMutableLineStyle lineStyle];
riskSymbolLineStyle.lineColor = riskPlotColor;
riskSymbol.lineStyle = riskSymbolLineStyle;
riskSymbol.size = CGSizeMake(8.0f, 8.0f);
self.riskValuesPlot.plotSymbol = riskSymbol;
4

1 回答 1

2

尝试这个:

CGMutablePathRef path = CGPathCreateMutable();

CGPathAddEllipseInRect( path, NULL, CGRectMake(0.0, 0.0, 10.0, 10.0) );
CGPathAddEllipseInRect( path, NULL, CGRectMake(2.0, 2.0, 6.0, 6.0) );
CGPathAddEllipseInRect( path, NULL, CGRectMake(4.0, 4.0, 2.0, 2.0) );

CPTPlotSymbol *riskSymbol = [CPTPlotSymbol customPlotSymbolWithPath:path];
riskSymbol.usesEvenOddClipRule = YES;
CGPathRelease(path);

调整圆圈的大小以获得环和中间圆圈之间所需的相对大小。纯色填充很容易,会给你第一个示例图像。您可以使用径向渐变填充来获得多种颜色。设置渐变,使颜色过渡被实心圆和圆环之间的空间隐藏。

于 2013-07-11T00:57:19.013 回答