ZoomingPDFViewer不会在启用分页的UIScrollViewer中进行缩放

lal*_*tin 1 iphone ios

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

UIWebView在一个UIScrollViewer启用了分页的容器中使用s 实现了它.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);
Run Code Online (Sandbox Code Playgroud)

这种方法很完美,但是当我有超过25页时它很慢并且Apple不建议使用UIWebView内部UIScrollViewUITableView因为触摸事件可能会产生意外结果.

所以我想改变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);
Run Code Online (Sandbox Code Playgroud)

此代码向我显示我的PDF页面,我可以在页面之间滑动,但我无法放大页面.

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

lal*_*tin 5

我找到了解决方案.

当你创建一个问题是UIScrollView编程它设置minimumZoomScalemaximumZoomScale1.0默认.所以实际上我的代码工作正常,但我不知道它是否有效,因为它没有放大或缩小.

所以我在我的代码中添加了两行代码!这是我的代码中的更改

PDFScrollView *pageViewer = [[PDFScrollView alloc] initWithFrame:frame];
pageViewer.minimumZoomScale = 0.2;
pageViewer.maximumZoomScale = 5.0;

[self.scrollviewer addSubview:pageViewer];
Run Code Online (Sandbox Code Playgroud)

当我插入两条线时,它可以工作,但我能够无限放大或缩小.我想以最大比例缩放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);
Run Code Online (Sandbox Code Playgroud)

更改后看起来像:

// 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);
Run Code Online (Sandbox Code Playgroud)

现在它有效.