在CGContextRef中与CALayer的误解

时间:2013-01-02 22:08:00

标签: cocoa calayer quartz-2d cgcontextref

我有一个自定义视图,我想在其中显示带有PDF内容的CALayer。为此,我实现了一个委托NSObject子类,如Using CALayer Delegate的第一个答案所示。


由于我有一个基于文档的应用程序,因此我有一个可以打开文档的起始窗口。从自定义文档我initWithWindowNibName:makeWindowControllers方法中的自定义windowController。从windowController,在windowDidLoad中,我设置了一个自定义NSView的变量值并初始化了CALayer。在同一个地方我运行这行代码来绘制内容:

[[[PDFViewLayerDelegate alloc] initWithUrl:url andPageIndex:currentPageIndex] drawLayer:layer1 inContext:[[NSGraphicsContext currentContext] graphicsPort]];

发生的事情是:在运行该行之前,CALayer的背景设置为绿色并且只出现在正确的窗口中,现在只有两个图层都填充白色时,PDF内容才会被绘制到初始窗口(也是在委托方法中完成的。

我的问题是:

  • 为什么我的CALayer被绘制到不属于自定义的视图 创建它的NSView子类?而且在不同的窗口?
  • 每个窗口中的两个视图是否共享相同的graphicsContext?这可能是原因..

1 个答案:

答案 0 :(得分:0)

我理解了这个问题......正如我认为问题是两个窗口共享相同的graphicsContext,因为currentContext是:

  

“当前线程的当前图形上下文。”


我只是解决了这个问题,将CALayer绘图函数调用放在它的容器NSView的drawRect:方法中,因为drawRect:负责在它的视图中独占绘图,并且可能已经以某种方式处理了GraphicsContext的东西。