1

我正在尝试显示水平放置的单页 PDF,以便可以通过向左或向右滑动来浏览页面。当然,我需要缩放页面。

我在启用了分页UIWebView的容器中使用 s实现了它。用作 PDF 查看器并处理页面更改。但是这个实现不是很好,它占用了太多内存,所以我决定使用 Apple 的而不是.UIScrollViewerUIWebViewUIScrollViewZoomingPDFViewerUIWebView

UIWebView的 s 原始代码如下所示:

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 不建议使用UIWebViewinside aUIScrollView或者UITableView因为触摸事件可能会产生意想不到的结果。

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 页面,我可以在页面之间滑动,但无法放大页面。

我不知道该怎么办。你能帮助我吗?

4

1 回答 1

5

我找到了解决方案。

问题是当您以UIScrollView编程方式创建它时,它默认设置minimumZoomScalemaximumZoomScale1.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);

现在它起作用了。

于 2013-03-26T20:50:25.567 回答