Cocoa PDFView отображает PDF только при изменении размера

Как заставить PDFView отображать PDF без необходимости изменять размер окна или выполнять прокрутите, чтобы принудительно перерисовать.

Как будто setNeedsDisplayнеобходимо сделать, но это не имеет никакого эффекта.

У меня есть самое простое приложение, которое я могу придумать для отображения PDF с помощью PDFView.

В основном создайте новое приложение в Xcode и измените код на:

// AppDelegate.h
#import 
#import 
@interface AppDelegate : NSObject 
@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 не кажется правильным.

Я создал Git-репозиторий проекта Xcode, который демонстрирует проблему для тех, у кого есть время, чтобы помочь и/или прокомментировать.

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

Использование Xcode версии 4.3.3 (4E3002)-Последний Лев.

Заранее благодарю за любую помощь.


Решение, которое работает.


Я нашел решение, благодаря которому, если я создам подкласс PDFView с пустой реализацией, а затем добавлю его как пользовательское представление и подключим его к моему существующему IBOutlet, он будет работать.

Для меня это вообще не имеет смысла:(

//DPPDFView.h
#import 
@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.

Я оставляю этот вопрос и сам ответ для тех, кто может пройти мимо с подобными вопросами, надеясь, что это будет для них тусклым маяком света; Также надеюсь, что кто-то с большей мудростью Какао укажет на ошибку в моем мышлении.

6
задан sotapme 26 June 2012 в 17:21
поделиться