Cocoa 在哪里放置用于视图和PDF生成的通用CoreGraphics绘图代码?
我有一个关于CoreGraphics绘图代码放置的问题。我有一个C结构,它是我的模型的表示,我有一个自定义视图类。此自定义视图类实现了一个Cocoa 在哪里放置用于视图和PDF生成的通用CoreGraphics绘图代码?,cocoa,drawing,core-graphics,Cocoa,Drawing,Core Graphics,我有一个关于CoreGraphics绘图代码放置的问题。我有一个C结构,它是我的模型的表示,我有一个自定义视图类。此自定义视图类实现了一个drawRect,并使用CoreGraphics进行绘制 我现在需要的能力,也从这个视图生成一个PDF导出它。它使用与视图完全相同的图形代码 我现在的解决方案是在自定义视图类中使用一个单独的绘图方法,并在drawRect方法和我的方法中使用该方法生成PDF 我不确定这是否是一个干净的解决方案,因为视图有一个与在屏幕上绘图无关的功能。但是,使用新的自定义类作为P
drawRect
,并使用CoreGraphics进行绘制
我现在需要的能力,也从这个视图生成一个PDF导出它。它使用与视图完全相同的图形代码
我现在的解决方案是在自定义视图类中使用一个单独的绘图方法,并在drawRect
方法和我的方法中使用该方法生成PDF
我不确定这是否是一个干净的解决方案,因为视图有一个与在屏幕上绘图无关的功能。但是,使用新的自定义类作为PDF生成器将意味着复制绘图代码
是否有一种干净的方法来组织此通用图形代码?可以使用helper对象并将其作为实例变量,但这会使它有点臃肿 打印时自动使用视图图形代码,并且可以使用打印创建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];
}
还值得注意的是,您可以通过使用
[NSGraphicsContext currentContextDrawingToScreen]
在-drawRect:
中进行测试,以查看当前是否正在绘制屏幕。如果它返回NO
,则您正在打印。@Rob:打印或导出为PDF或EPS。我不确定当视图渲染为NSImage时,或者当您以编程方式锁定视图焦点时(例如,使用-[NSBitmapImageRep initWithFocusedViewRect:]),它会返回什么。这比我预期的简单。非常感谢。因此,如果单击按钮导出PDF,我可以在我的视图控制器中使用上面的代码。所以我的方法太低了。。。