0

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

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

CPTPieChart 边缘有伪影

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

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

对我来说,它们看起来像是剪裁或抖动的伪影,所以我尝试将背景颜色和图形填充设置为白色或透明,但这没有区别。

我正在使用 CorePlot 1.1。有谁知道为什么会这样?任何帮助将非常感激。

谢谢。

4

1 回答 1

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 上下文,并且临时图像上下文是嵌套的,但这很好。

于 2013-03-25T21:54:09.617 回答