gpt4 book ai didi

objective-c - Cocoa PDFView 仅在调整大小时显示 PDF

转载 作者:太空狗 更新时间:2023-10-30 03:45:37 26 4
gpt4 key购买 nike

如何让 PDFView 显示 PDF 而无需调整窗口大小或执行滚动以强制重绘。

就好像需要完成一个setNeedsDisplay,但没有任何效果。

我有我能想到的使用 PDFView 显示 PDF 的最简单的应用程序。

基本上在 Xcode 中创建一个新应用并将代码更改为:

// AppDelegate.h
#import <Cocoa/Cocoa.h>
#import <Quartz/Quartz.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet PDFView *pdfView;
@end

// AppDelegate.m
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
@synthesize pdfView = _pdfView;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSURL *pdfURL = [[NSBundle mainBundle] URLForResource:@"TestPage" withExtension:@"pdf"];
PDFDocument *document = [[PDFDocument alloc] initWithURL: pdfURL];
self.pdfView.document = document;
}
@end

我注意到 Apple 代码示例中的相同行为 PDFKitLinker2必须滚动 PDF 或调整窗口大小才能显示 PDF。

诚然,我是 Cocoa 开发领域的新手,但我已经搜索过,但没有发现任何真正的小示例来展示如何显示 PDF。我生成的内容似乎是正确的,但我怀疑甚至 PDFKitLinker2 似乎也不正确。

我创建了一个 Xcode project that demonstrates the issue 的 Git 仓库对于那些有时间提供帮助和/或评论的人。

git clone git@bitbucket.org:sotapme/pdfview_open.git

使用 Xcode 版本 4.3.3 (4E3002) - Latest Lion。

在此先感谢您的帮助。


有效的解决方案。


我找到了一个解决方案,如果我创建一个带有空实现的 PDFView 的子类,然后将其添加为自定义 View 并将其连接到我现有的 IBOutlet,它就可以工作。

对我来说毫无意义:(

//DPPDFView.h
#import <Quartz/Quartz.h>
@interface DPPDFView : PDFView
@end

//DPPDFView.m
#import "DPPDFView.h"
@implementation DPPDFView
@end

Apple 的文档确实说:

PDFView may be the only class you need to deal with for adding PDF functionality to your application. It lets you display PDF data and allows users to select content, navigate through a document, set zoom level, and copy textual content to the Pasteboard. PDFView also keeps track of page history.

You can subclass PDFView to create a custom PDF viewer.

我把这个问题和 self 回答留给那些可能有类似问题的人,希望它能成为他们的一盏昏暗的灯塔;也希望有更多 Cocoa 智慧的人指出我想法中的错误。

最佳答案

我认为这确实是由于 PDFview 在延迟加载完成实际加载 PDF 文档后 需要 setNeedsDisplay 引起的。

一个 hack,但将以下内容添加到您的 - (void)windowDidLoad 方法至少可以正确显示文档而无需调整大小。

dispatch_async(dispatch_get_main_queue(), ^{
[self.myPDFView setNeedsDisplay:YES];
});

关于objective-c - Cocoa PDFView 仅在调整大小时显示 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11197627/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com