3

我想对NSImageViewwith进行注释CALayer。目的是能够CALayer在图像上绘制形状 (a),并在单独的视图中显示有关已突出显示的区域的信息。例如,用户可以在图像视图上绘制一个矩形,该区域下的像素可以被放大并显示在另一个窗口中。

我想要一些关于使用CALayer. 如果调整视图大小,我希望选择区域的位置保持同步,也就是说,相对于图像的位置应该保持不变。

我有点困惑,因为 CALayer 文档声明了layer-backed views

  • “当使用支持层的视图时,你不应该直接与层交互。相反,你必须使用标准的视图编程实践。”

    显然这不是合适的选择,因为我想拥有该层并直接与之交互。

对于图层托管视图

  • “使用图层托管视图时,您不应依赖视图进行绘图,也不应将子视图添加到图层托管视图。”

    所以看起来视图应该是层托管的。但是,使我的 NSImageView (子类)图层托管会阻止图像绘制,因为NSImageView(我假设)依赖于-drawRect:. -drawRect:不使用图层托管视图调用。它还希望在视图为空时在视图中进行一些自定义绘图,例如占位符消息,为此我需要-drawRect:

因此,一种可能的解决方案是在 Interface Builder 中在图像视图上方放置一个“注释视图”,即它们不是嵌套的,而是简单地占据相同的空间并具有相同的大小。我可以在 Interface Builder 中指定 z 顺序,因此注释视图始终位于顶部。然后我将注释视图设置为图层托管,并保持图像视图不变。

这似乎是一个黑客,所以我相信有更好的方法。当然,我可以在图像视图中绘制注释,-drawRect:但这会添加大量代码,我不想在不探索替代方案的情况下立即这样做。

4

1 回答 1

1

我寻求的解决方案是根本不改变 NSImageView 子类的层。相反,我向 NSImageView 子类添加了一个子视图,限制了视图,使其与父视图具有相同的边界,然后使这个子视图成为图层托管。然后可以将子层添加到这个“注释”视图的层。通过这种方式,我可以在 NSImageView 上进行注释。

于 2013-07-10T14:22:44.100 回答