Как заставить PDFView отображать PDF-файл без необходимости изменять размер окна или выполнять прокрутку, чтобы принудительно перерисовать.
Как будто нужно сделать setNeedsDisplay
, но это не имеет никакого эффекта.
У меня есть самое простое приложение, которое я могу придумать для отображения PDF с помощью PDFView.
В основном создайте новое приложение в 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 не кажется правильным.
Я создал Git-репозиторий проекта Xcode, который демонстрирует проблему для тех, у кого есть время, чтобы помочь и /или комментарий.
git clone [email protected]:sotapme/pdfview_open.git
Использование Xcode версии 4.3.3 (4E3002) — последний лев.
Заранее благодарю за любую помощь.
Решение, которое работает.
Я нашел решение, в соответствии с которым, если я создам подкласс PDFView с пустой реализацией, а затем добавлю его в качестве пользовательского представления и подключим его к моему существующему IBOutlet
, он будет работать.
Мне вообще смысла нет :(
//DPPDFView.h
#import <Quartz/Quartz.h>
@interface DPPDFView : PDFView
@end
и
//DPPDFView.m
#import "DPPDFView.h"
@implementation DPPDFView
@end
Документы Apple говорят:
PDFView может быть единственным классом, с которым вам нужно иметь дело для добавления функций PDF в ваше приложение. Он позволяет отображать данные PDF и позволяет пользователям выбирать содержимое, перемещаться по документу, устанавливать уровень масштабирования и копировать текстовое содержимое в монтажный стол. PDFView также отслеживает историю страниц.
Вы можете создать подкласс PDFView для создания собственного средства просмотра PDF.
Я оставляю этот вопрос и сам ответ для тех, кто может пройти мимо с подобными вопросами, надеясь, что это будет для них тусклым маяком света; Также надеюсь, что кто-то, у кого больше мудрости какао, укажет на ошибку в моем мышлении.