Где разместить общий код рисования CoreGraphics для просмотра и создания PDF? - PullRequest
2 голосов
/ 20 июня 2011

У меня вопрос по размещению кода рисования CoreGraphics. У меня есть структура C, которая является представлением моей модели, и у меня есть собственный класс представления. Этот пользовательский класс представления реализует drawRect и рисует его с помощью CoreGraphics.

Теперь мне нужна возможность создать PDF-файл из этого представления для его экспорта. Он использует тот же код рисования, который использовался для вида.

Мое решение сейчас состоит в том, чтобы иметь отдельный метод рисования в классе пользовательского представления и использовать этот метод в методе drawRect и моем методе для создания PDF.

Я не уверен, что это чистое решение, потому что у представления есть функция, которая не имеет ничего общего с рисованием на экране. Однако использование нового пользовательского класса в качестве генератора PDF означало бы дублирование кода рисования.

Есть ли чистый способ организовать этот общий код для рисования? Можно использовать вспомогательный объект и использовать его в качестве переменной экземпляра, но это сделает его немного раздутым.

1 Ответ

4 голосов
/ 21 июня 2011

Архитектура печати Cocoa автоматически использует код рисования вида при печати, и печать может использоваться для создания файла PDF. Это означает, что вы можете просто поместить свой собственный чертежный код вида в -drawRect и затем сделать что-то вроде:

NSView *targetView = …;
NSString *pdfFilePath = …;
NSMutableData *pdfData = [NSMutableData data];
NSPrintOperation *printOp = [NSPrintOperation PDFOperationWithView:targetView
    insideRect:[targetView bounds]
    toData:pdfData];
if ([printOp runOperation]) {
    [pdfData writeToFile:pdfFilePath atomically:YES];
}
...