Core-Plot饼图borderLineStyle artefacts

时间:2013-03-22 21:40:36

标签: iphone ios core-plot

我正在使用CorePlot绘制饼图,我将其转换为PDF以供查看,打印和发送电子邮件。所有这一切都很好,除了当我添加borderLineStyle时,我还会在饼图的边缘周围得到人工制品。

你在iPhone的屏幕上或打印时并没有真正注意到它们,但是当通过电子邮件发送和在大屏幕上观看时(在acrobat阅读器中),它们立即显而易见。此屏幕截图缩放到400%,但它们在100%时也清晰可见。您可以在饼图的内部和外部看到剪裁伪影。

CPTPieChart with artifacts round the edges

如果我不使用borderLineStyle,那么饼图很干净。只有在设置线条样式时才会显示人工制品。我喜欢这个:

CPTMutableLineStyle *segmentLineStyle = [CPTMutableLineStyle lineStyle];
segmentLineStyle.lineColor = colour;
segmentLineStyle.lineWidth = size;
_pieChart.borderLineStyle = segmentLineStyle;

对我而言,它们看起来像剪裁或抖动的人工制品,所以我尝试设置背景颜色,图形填充为白色或透明,但这没有区别。

我正在使用CorePlot 1.1。有没有人有任何想法为什么会这样?任何帮助将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。感谢Eric提示Core Graphics渲染到不支持透明度的旧PDF格式,我想我会改变我撕裂饼图的方式。

以前我只是将饼图渲染到pdf上下文中,如下所示:

CGContextRef pdfContext = UIGraphicsGetCurrentContext();
[pieChartView.layer renderInContext:pdfContext];

现在我首先将饼图渲染为UIImage,然后将图像渲染到pdf上下文。像这样:

// Pre-render the pie chart into a temporary UIImage
UIGraphicsBeginImageContextWithOptions (pieChartView.frame.size, YES, 0.0f);
CGContextRef tmpContext = UIGraphicsGetCurrentContext();
[pieChartView.layer renderInContext:tmpContext];
UIImage *pieChartTmpImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

// Draw the pre-rendered pie chart in to the PDF context.
[pieChartTmpImage drawInRect:CGRectMake(0, 0, pieChartTmpImage.size.width, pieChartTmpImage.size.height)];

现在可以干净地呈现饼图:)

值得指出的是,当这段代码运行并且嵌套了临时图像上下文时,已经建立了pdf上下文,但这很好。