2010-03-17 57 views
3

我重寫了自定義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用於翻轉上下文,它會完美繪製:它只是繪製顛倒。

任何想法?

回答

10

嘗試做規模前翻譯:

CGContextTranslateCTM(context, 0.0, rect.size.height); 
CGContextScaleCTM(context, 1.0, -1.0); 
+0

這將產生完全相同的結果,我害怕。 – 2010-03-17 03:11:18

+0

卡特艾倫:代碼,因爲我已經糾正它應該工作得很好。翻譯,然後縮放正是你需要做的翻轉(或在這種情況下,解開)協調系統。 – 2010-03-17 07:03:05

+0

是的,這段代碼就是我在一些應用程序中用於翻轉Quartz繪圖的代碼,所以它應該可以工作。 – 2010-03-17 12:37:44

2
CGContextTranslateCTM(context, 0, self.bounds.size.height); 
CGContextScaleCTM(context, 1.0, -1.0); 

CGPDFPageRef page = CGPDFDocumentGetPage(pdf, currentPage); 
CGContextSaveGState(context); 




CGRect box = CGPDFPageGetBoxRect(page, kCGPDFMediaBox); 

CGContextScaleCTM(context, self.bounds.size.width/box.size.width, self.bounds.size.height/box.size.height); 
CGContextDrawPDFPage(context, page); 
CGContextRestoreGState(context); 

這是一個正確回答你的問題

0

要縮放轉換之前,我想我們可以把減去轉換時。

CGContextScaleCTM(context, 1.0, -1.0); 
CGContextTranslateCTM(context, 0.0, -rect.size.height); 
0

這一切翻轉右側爲我:

pdfDisplayView.layer.geometryFlipped = YES; //(NO)