我的应用程序中有几个shinobicharts,我想打印成PDF文件。其他所有内容,如普通视图,标签和图像都可以正常工作,甚至可以显示网格,图例和网格标签。唯一缺少的是系列。所以基本上我得到一个打印在PDF文件中的空图表。
我按如下方式打印PDF:
NSMutableData * pdfData=[NSMutableData data];
PDFPage1ViewController *pdf1 = [self.storyboard instantiateViewControllerWithIdentifier:@"PDF1"];
pdf1.array1 = array1;
pdf1.array2 = array2;
pdf1.array3 = array3;
pdf1.array4 = array4;
UIGraphicsBeginPDFContextToData(pdfData, CGRectZero,nil);
CGContextRef pdfContext=UIGraphicsGetCurrentContext();
UIGraphicsBeginPDFPage();
[pdf1.view.layer renderInContext:pdfContext];
UIGraphicsEndPDFContext();
PDF1PageViewController中完全相同的代码在普通的viewController中绘制漂亮的图表,而不是错过了系列。 数组包含应显示的数据。
[编辑]
这段代码为我做了:
UIGraphicsBeginImageContextWithOptions(pdf1.view.bounds.size, NO, 0.0);
[pdf1.view drawViewHierarchyInRect:pdf1.view.bounds afterScreenUpdates:YES];
UIImage *pdf1Image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageView *pdf1ImageView = [[UIImageView alloc] initWithImage:pdf1Image];
[pdf1ImageView.layer renderInContext:pdfContext];
虽然活动轮在drawViewHierarchyInRect
之后停止旋转,但显示当前页面的标签也会停止更新。任何人都知道如何解决这个问题?
答案 0 :(得分:1)
您遇到此问题的原因是图表的系列部分以openGLES呈现,因此不会呈现为renderInContext:
的一部分。
您可以使用以下几个选项进行调查。第一个是在iOS7中UIView
上添加了一些快照方法。如果您的应用只能限制为iOS7,则snapshotViewAfterScreenUpdates:
会返回UIView
,这是内容的快照。我认为以下(未经测试的)代码将起作用:
UIGraphicsBeginPDFPage();
UIView *pdfPage = [pd1.view snapshotViewAfterScreenUpdates:YES];
[pdfPage.layer renderInContext:pdfContext];
UIGraphicsEndPDFContext();
在[{3}}
的ShinobiControls博客上有关于此方法的更多详细信息如果将应用程序限制为iOS7不是一个选项,那么您仍然可以获得所需的结果,但它有点复杂。幸运的是,ShinobiControls博客(http://www.shinobicontrols.com/blog/posts/2014/02/24/taking-a-chart-snapshot-in-ios7)上有一篇博客文章介绍了如何从图表中创建UIImage
。这可以很容易地适应渲染到您的PDF上下文,而不是在帖子中创建的图像上下文。该帖子附带了一个额外的代码段,可在github上找到:http://www.shinobicontrols.com/blog/posts/2012/03/26/taking-a-shinobichart-screenshot-from-your-app。
希望这有帮助
SAM