我重写了自定义UIView中的drawRect:方法,并且正在执行一些自定义绘制。一切进展顺利,直到我需要将PDF资源(精确的矢量字形)绘制到上下文中。首先,我检索文件的PDF:在CGContext中绘制PDF右侧向上
NSURL *pdfURL = [NSURL fileURLWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"CardKit.bundle/A.pdf"]];
CGPDFDocumentRef pdfDoc = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfDoc, 1);
然后我创建一个具有相同尺寸与加载PDF的盒子:
CGRect box = CGPDFPageGetBoxRect(pdfPage, kCGPDFArtBox);
然后保存我的图形状态,让我不要螺丝任何东西:
CGContextSaveGState(context);
然后我进行规模+翻译CTM的,理论上翻转整个来龙去脉:
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0.0, rect.size.height);
我然后缩放PDF,使其适合的观点正确:
CGContextScaleCTM(context, rect.size.width/box.size.width, rect.size.height/box.size.height);
最后,我得出的PDF和还原图形状态:
CGContextDrawPDFPage(context, pdfPage);
CGContextRestoreGState(context);
的问题是,没有任何可见的绘制。所有这些代码理论上应该将PDF字形绘制到视图中,对吧?
如果我删除scale + translate用于翻转上下文,它会完美绘制:它只是绘制颠倒。
任何想法?
这将产生完全相同的结果,我害怕。 – 2010-03-17 03:11:18
卡特艾伦:代码,因为我已经纠正它应该工作得很好。翻译,然后缩放正是你需要做的翻转(或在这种情况下,解开)协调系统。 – 2010-03-17 07:03:05
是的,这段代码就是我在一些应用程序中用于翻转Quartz绘图的代码,所以它应该可以工作。 – 2010-03-17 12:37:44