iPadでPDF
今更という感じもあるけど、今回はiPadやiPhoneでPDFを表示するときの注意点を書いておく。
PDFを表示するためには CGPDF系のAPIを使うことになるんだけど、UIVIewのdrawRectに
CGPDFPageRef page = CGPDFDocumentGetPage(pdfDocument, pageNumber); CGContextDrawPDFPage(context, page); CGPDFPageRelease(page);
でできる(かなり省略してるが)。ただ注意しないといけないのは、これを繰り返すとアプリが落ちることだ。
おそらくメモり不足だと思うが、CGPDFPageRelease がうまく動いていないようだ。
CGDocumentRelese(pdfDocument)
でメモリ解放してくれてるようなので、CGPDFPageRef が返ってくる関数は最小限で押さえた方が良さそうだ。
ちなみに・・・、CGContextDrawPDFPage では座標系が異なるので、あわせてあげないと上下反転していたり、表示されなかったりするのでこれも注意しないといけない。まぁ、次のようにしておけば、全画面表示になる。
- (void) drawRect:(CGRect)rect { CGContextRef ctx = UIGraphicsGetCurrentContext(); CGRect r = CGPDFPageGetBoxRect(page, kCGPDFMediaBox); CGFloat rw = rect.size.width / r.size.width; CGFloat rh = rect.size.height / r.size.height; CGContextTranslateCTM(ctx, 0, rect.size.height); CGContextScaleCTM(ctx, rw, -rh); CGContextDrawPDFPage(ctx, page); }