核心情节符号与自定义路径

时间:2013-07-10 12:40:38

标签: ios core-graphics core-plot

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

+(CPPlotSymbol *)customPlotSymbolWithPath:(CGPathRef)aPath

我可以在这个特定主题上找到有限的帮助,虽然我一直在阅读关于创建CGPathRef的苹果文档但是无法使自定义符号起作用。我的最终目标是创建符号:

enter image description here enter image description here

有些符号需要有红色内圈,有些符号需要蓝色,有些符号根本不需要外圈(在这种情况下我使用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;

1 个答案:

答案 0 :(得分: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);

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