我正在尝试显示水平放置的单页PDF,以便可以通过向左或向右滑动来浏览页面。当然我需要缩放页面。
我在容器UIWebView
内使用UIScrollViewer
实现了它,启用了分页。 UIWebView
用作PDF查看器,UIScrollView
处理页面更改。但是这个实现不是很好,它使用了太多的内存,因此我决定使用Apple的ZoomingPDFViewer
代替UIWebView
。
UIWebView
的原始代码看起来像这样:
for (int i=0; i<n; i++)
{
CGRect frame;
frame.origin.y = 0;
frame.origin.x = self.scrollviewer.frame.size.width * i;
frame.size = self.scrollviewer.frame.size;
UIWebView *pageViewer = [[UIWebView alloc] initWithFrame:frame];
pageViewer.scalesPageToFit = TRUE;
pageViewer.multipleTouchEnabled = TRUE;
[self.scrollviewer addSubview:pageViewer];
NSURL *url = [NSURL URLWithString:address];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[pageViewer loadRequest:req];
}
self.scrollviewer.contentSize = CGSizeMake(nPages * self.scrollviewer.frame.size.width, self.scrollviewer.frame.size.height);
这种方法很完美,但是当我的页面超过25页时速度很慢而Apple不建议在UIWebView
或UIScrollView
内使用UITableView
,因为触摸事件可能会产生意外结果
所以我想将Apple的示例中的UIWebView
更改为ZoomingPDFViewer
。我的ZoomingPDFViewer
新代码如下所示:
for (int i=0; i<n; i++)
{
CGRect frame;
frame.origin.y = 0;
frame.origin.x = self.scrollviewer.frame.size.width * i;
frame.size = self.scrollviewer.frame.size;
PDFScrollView *pageViewer = [[PDFScrollView alloc] initWithFrame:frame];
[self.scrollviewer addSubview:pageViewer];
NSURL *url = [NSURL URLWithString:address];
CGPDFDocumentRef PDFDocument = CGPDFDocumentCreateWithURL((__bridge CFURLRef)url);
CGPDFPageRef PDFPage = CGPDFDocumentGetPage(PDFDocument, 1);
[(PDFScrollView *)pageViewer setPDFPage:PDFPage];
CGPDFDocumentRelease(PDFDocument);
}
self.scrollviewer.contentSize = CGSizeMake(nPages * self.scrollviewer.frame.size.width, self.scrollviewer.frame.size.height);
此代码向我显示我的PDF页面,我可以在页面之间滑动,但我无法放大页面。
我不知道该怎么办。你能救我吗?
答案 0 :(得分:5)
我找到了解决方案。
问题是,当您以编程方式创建UIScrollView
时,它默认设置minimumZoomScale
和maximumZoomScale
1.0。所以实际上我的代码工作正常,但我不知道它有效,因为它没有放大或缩小。
所以我在我的代码中添加了两行代码!以下是我的代码中的更改
PDFScrollView *pageViewer = [[PDFScrollView alloc] initWithFrame:frame];
pageViewer.minimumZoomScale = 0.2;
pageViewer.maximumZoomScale = 5.0;
[self.scrollviewer addSubview:pageViewer];
当我插入两条线时它可以工作,但我能够无限放大或缩小。我想以最大比例缩放5.所以我更改了文件scrollViewDidEndZooming
中给出的PDFScrollView.m
方法
Apple的ZoomingPDFViewer
附带的默认代码如下所示:
// Set the new scale factor for the TiledPDFView.
_PDFScale *= scale;
// Calculate the new frame for the new TiledPDFView.
CGRect pageRect = CGPDFPageGetBoxRect(_PDFPage, kCGPDFMediaBox);
pageRect.size = CGSizeMake(pageRect.size.width*_PDFScale, pageRect.size.height*_PDFScale);
更改后看起来像:
// Set the new scale factor for the TiledPDFView.
_PDFScale *= scale;
self.minimumZoomScale *= 1 / scale;
self.maximumZoomScale *= 1 / scale;
// Calculate the new frame for the new TiledPDFView.
CGRect pageRect = CGPDFPageGetBoxRect(_PDFPage, kCGPDFMediaBox);
pageRect.size = CGSizeMake(pageRect.size.width*_PDFScale, pageRect.size.height*_PDFScale);
现在可行。