Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 在哪里放置用于视图和PDF生成的通用CoreGraphics绘图代码?_Cocoa_Drawing_Core Graphics - Fatal编程技术网

Cocoa 在哪里放置用于视图和PDF生成的通用CoreGraphics绘图代码?

Cocoa 在哪里放置用于视图和PDF生成的通用CoreGraphics绘图代码?,cocoa,drawing,core-graphics,Cocoa,Drawing,Core Graphics,我有一个关于CoreGraphics绘图代码放置的问题。我有一个C结构,它是我的模型的表示,我有一个自定义视图类。此自定义视图类实现了一个drawRect,并使用CoreGraphics进行绘制 我现在需要的能力,也从这个视图生成一个PDF导出它。它使用与视图完全相同的图形代码 我现在的解决方案是在自定义视图类中使用一个单独的绘图方法,并在drawRect方法和我的方法中使用该方法生成PDF 我不确定这是否是一个干净的解决方案,因为视图有一个与在屏幕上绘图无关的功能。但是,使用新的自定义类作为P

我有一个关于CoreGraphics绘图代码放置的问题。我有一个C结构,它是我的模型的表示,我有一个自定义视图类。此自定义视图类实现了一个
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,我可以在我的视图控制器中使用上面的代码。所以我的方法太低了。。。