我想对NSImageView
with进行注释CALayer
。目的是能够CALayer
在图像上绘制形状 (a),并在单独的视图中显示有关已突出显示的区域的信息。例如,用户可以在图像视图上绘制一个矩形,该区域下的像素可以被放大并显示在另一个窗口中。
我想要一些关于使用CALayer
. 如果调整视图大小,我希望选择区域的位置保持同步,也就是说,相对于图像的位置应该保持不变。
我有点困惑,因为 CALayer 文档声明了layer-backed views,
“当使用支持层的视图时,你不应该直接与层交互。相反,你必须使用标准的视图编程实践。”
显然这不是合适的选择,因为我想拥有该层并直接与之交互。
对于图层托管视图,
“使用图层托管视图时,您不应依赖视图进行绘图,也不应将子视图添加到图层托管视图。”
所以看起来视图应该是层托管的。但是,使我的 NSImageView (子类)图层托管会阻止图像绘制,因为
NSImageView
(我假设)依赖于-drawRect:
.-drawRect:
不使用图层托管视图调用。它还希望在视图为空时在视图中进行一些自定义绘图,例如占位符消息,为此我需要-drawRect:
。
因此,一种可能的解决方案是在 Interface Builder 中在图像视图上方放置一个“注释视图”,即它们不是嵌套的,而是简单地占据相同的空间并具有相同的大小。我可以在 Interface Builder 中指定 z 顺序,因此注释视图始终位于顶部。然后我将注释视图设置为图层托管,并保持图像视图不变。
这似乎是一个黑客,所以我相信有更好的方法。当然,我可以在图像视图中绘制注释,-drawRect:
但这会添加大量代码,我不想在不探索替代方案的情况下立即这样做。