Objective c PDFView没有';将PDFPage添加到PDFDocument时不更新

Objective c PDFView没有';将PDFPage添加到PDFDocument时不更新,objective-c,macos,cocoa,pdfview,pdfpage,Objective C,Macos,Cocoa,Pdfview,Pdfpage,我正在制作一个扫描多页pdf文件的应用程序。我有一个链接的PDFView和PDFThumbnailView。第一次完成扫描时,我创建一个新的PDFDocument,并将其设置为PDFView。然后,每当完成另一次扫描时,我会将PDFPage添加到[pdfView文档] 现在的问题是,每当添加页面时,PDFView或PDFView都不会更新以显示带有额外页面的新文档。直到我放大或缩小,它们都会更新以显示带有新页面的文档 我现在的临时解决方案(放大然后自动缩放)肯定不是最好的。例如,当您已放大文档,

我正在制作一个扫描多页pdf文件的应用程序。我有一个链接的
PDFView
PDFThumbnailView
。第一次完成扫描时,我创建一个新的
PDFDocument
,并将其设置为
PDFView
。然后,每当完成另一次扫描时,我会将
PDFPage
添加到
[pdfView文档]

现在的问题是,每当添加页面时,
PDFView
PDFView
都不会更新以显示带有额外页面的新文档。直到我放大或缩小,它们都会更新以显示带有新页面的文档

我现在的临时解决方案(放大然后自动缩放)肯定不是最好的。例如,当您已放大文档,并扫描新页面时,视图将自动缩放。我以前试过
[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
并更新
PDFView
而不影响
PDFView
的缩放状态吗?

您需要手动调用:

- (void)layoutDocumentView
我想这不是手动调用的原因是为了允许将多个更改合并到一个更新中

这是记录在案的:

PDFView实际上包含多个子视图,例如文档 视图(实际绘制PDF的位置)和“蒙版视图”(可能 显示为PDF内容周围的灰色区域,具体取决于 缩放)。对PDF内容的更改可能需要对这些内容进行更改 内部视图,因此如果使用PDF,则必须显式调用此方法 用于添加或删除页面、旋转页面或执行以下操作的工具包实用程序类 影响可见布局的其他操作

此方法将从影响的PDFView方法中自动调用 可见布局(例如setDocument:、setDisplayBox:或zoomIn:)


您需要手动调用:

- (void)layoutDocumentView
我想这不是手动调用的原因是为了允许将多个更改合并到一个更新中

这是记录在案的:

PDFView实际上包含多个子视图,例如文档 视图(实际绘制PDF的位置)和“蒙版视图”(可能 显示为PDF内容周围的灰色区域,具体取决于 缩放)。对PDF内容的更改可能需要对这些内容进行更改 内部视图,因此如果使用PDF,则必须显式调用此方法 用于添加或删除页面、旋转页面或执行以下操作的工具包实用程序类 影响可见布局的其他操作

此方法将从影响的PDFView方法中自动调用 可见布局(例如setDocument:、setDisplayBox:或zoomIn:)


到目前为止,手动刷新带有注释的PDFView的最佳解决方案是将PDFView移动到另一个页面,然后返回到需要刷新的页面,因为:

-(void)layoutDocumentView
在我的情况下对我不起作用

然后:


到目前为止,手动刷新带有注释的PDFView的最佳解决方案是将PDFView移动到另一个页面,然后返回到需要刷新的页面,因为:

-(void)layoutDocumentView
在我的情况下对我不起作用

然后:


如果你只调用[pdfView setNeedsDisplay:YES]会发生什么?如果你只调用[pdfView setNeedsDisplay:YES]会发生什么?我投票的结果是希望答案会有效,在我的情况下购买(macOS 10.12)我无法显示我刚才绘制的注释,你能找到问题的解决方案吗。这些问题在最新版本的PDFKit中似乎仍在继续。我投票希望答案能起作用,请在我的案例中购买(macOS 10.12)。我无法显示我刚才绘制的注释,您是否找到了问题的解决方案。这些问题似乎在最新版本的PDFKit中继续存在。