1

左右にスワイプしてページを移動できるように、1ページのPDFを水平に配置して表示しようとしています。そしてもちろん、ページをズームする必要があります。

ページングが有効になっUIWebViewているコンテナ内でsを使用して実装しました。PDFビューアとして機能し、ページの変更を処理します。しかし、この実装は良いものではなく、メモリを使いすぎるので、の代わりにAppleを使用することにしました。UIScrollViewerUIWebViewUIScrollViewZoomingPDFViewerUIWebView

sの元のコードは次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ページを表示します。ページ間をスワイプすることはできますが、ページを拡大することはできません。

どうしたらいいのかわからない。手伝って頂けますか?

4

1 に答える 1

5

私は解決策を見つけました。

問題は、UIScrollViewプログラムで作成すると、デフォルトminimumZoomScalemaximumZoomScale1.0に設定されることでした。したがって、実際には私のコードは機能していましたが、ズームインまたはズームアウトしていないため、コードが機能していることを知りませんでした。

だから私は私のコードに2行を追加しました、そしてそれはうまくいきました!!! これが私のコードの変更です

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

[self.scrollviewer addSubview:pageViewer];

2本の線を挿入すると機能しましたが、無限にズームインまたはズームアウトすることができました。最大スケール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 に答える