2

複数ページのPDFファイルをスキャンするアプリケーションを作成しています。リンクされている aPDFViewと aがあります。PDFThumbnailView初めてスキャンが完了すると、新しい を作成してPDFDocumentに設定しPDFViewます。次に、別のスキャンが完了するたびに、 に を追加PDFPage[pdfView document]ます。

問題は、ページが追加されるたびに、追加のページを含む新しいドキュメントを表示するPDFViewPDFThumbnailView更新しないことです。それは、ズームインまたはズームアウトするまでです。その後、両方が更新されて、ドキュメントが新しいページで表示されます。

私が現在持っている一時的な解決策 (ズームインしてから自動スケーリングする) は、確かに最善の解決策ではありません。たとえば、ドキュメントを既に拡大しているときに新しいページをスキャンすると、ビューは自動スケーリングされます。前に試してみ[pdfView setNeedsDisplay:YES]ましたが、うまくいかないようです。

これは、スキャンが次のように到着するメソッドNSDataです。

- (void)scannerDevice:(ICScannerDevice *)scanner didScanToURL:(NSURL *)url data:(NSData *)data {
    //Hide the progress bar
    [progressIndicator stopAnimation:nil];

    //Create a pdf page from the data
    NSImage *image = [[NSImage alloc] initWithData:data];
    PDFPage *page = [[PDFPage alloc] initWithImage:image];

    //If the pdf view has a document
    if ([pdfView document]) {
        //Set the page number and add it to the document
        [page setValue:[NSString stringWithFormat:@"%d", [[pdfView document] pageCount] + 1] forKey:@"label"];
        [[pdfView document] insertPage:page atIndex:[[pdfView document] pageCount]];
    } else {
        //Create a new document and add the page
        [page setValue:@"1" forKey:@"label"];
        PDFDocument *document = [[PDFDocument alloc] init];
        [document insertPage:page atIndex:0];
        [pdfView setDocument:document];
    }

    //Force a redraw for the pdf view so the pages are shown properly
    [pdfView zoomIn:self];
    [pdfView setAutoScales:YES];
}

のズーム状態をいじらずに を追加しPDFPageて更新できる方法を知っている人はいますか?PDFViewPDFView

4

2 に答える 2

4

手動で呼び出す必要があります:

- (void)layoutDocumentView

これが手動で呼び出されない理由は、複数の変更を 1 つの更新に結合できるようにするためだと思います。

これは文書化されています:

PDFView には、ドキュメント ビュー (PDF が実際に描画される場所) や「マット ビュー」 (スケーリングによっては、PDF コンテンツの周りに灰色の領域として表示される場合があります) など、いくつかのサブビューが実際に含まれています。PDF コンテンツを変更すると、これらの内部ビューの変更が必要になる場合があるため、PDF Kit ユーティリティ クラスを使用してページの追加または削除、ページの回転、または表示レイアウトに影響するその他の操作を実行する場合は、このメソッドを明示的に呼び出す必要があります。

このメソッドは、表示レイアウトに影響を与える PDFView メソッド (setDocument:、setDisplayBox:、zoomIn: など) から自動的に呼び出されます。

于 2014-12-08T16:22:25.090 に答える