0

我有一个自定义视图,我想在其中显示带有 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?可能是这个原因。。
4

1 回答 1

0

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

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


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

于 2013-01-03T11:49:34.547 回答