Cocoa CGContextRef中与CALayer的误解

Cocoa CGContextRef中与CALayer的误解,cocoa,calayer,quartz-2d,cgcontextref,Cocoa,Calayer,Quartz 2d,Cgcontextref,我有一个自定义视图,我想在其中显示带有PDF内容的CALayer。为此,我实现了一个delegate NSObject子类,如的第一个答案所示 因为我有一个基于文档的应用程序,所以我有一个可以打开文档的开始窗口。来自自定义文档I initWithWindowNibName:来自MakeWindowController方法的自定义windowController。从windowController的windowDidLoad中,我设置了一个自定义NSView的变量值并初始化CALayer。在同一

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


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

[[[PDFViewLayerDelegate alloc] initWithUrl:url andPageIndex:currentPageIndex] drawLayer:layer1 inContext:[[NSGraphicsContext currentContext] graphicsPort]];
发生的情况是:在运行该行之前,CALayer的背景设置为绿色,并且只会显示在正确的窗口中,现在PDF内容仅在两个层都填充白色时才会绘制到初始窗口(这也是在委托方法中完成的)

我的问题是:

  • 为什么我的CALayer被吸引到了一个不符合习俗的地方 NSView子类是谁创建的?而且在不同的窗口
  • 每个窗口中的两个视图是否共享相同的graphicsContext?这可能是原因

    • 我理解这个问题。。。正如我推测的那样,问题在于两个窗口共享相同的graphicsContext,而currentContext是:

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


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