Xcode 使用Calayer、图层宿主或图层备份在NSImageView上进行注释?
我想用Xcode 使用Calayer、图层宿主或图层备份在NSImageView上进行注释?,xcode,macos,cocoa,core-animation,Xcode,Macos,Cocoa,Core Animation,我想用CALayer在NSImageView上添加注释。其目的是能够在图像上绘制形状(一个CALayer),并在单独的视图中显示已高亮显示区域的信息。例如,用户可以在图像视图上绘制一个矩形,该区域下的像素可以放大并显示在另一个窗口中 我想了解一些关于使用CALayer实现在图像视图顶部绘制的最佳方法的一般建议。如果视图调整大小,我希望选择区域的位置保持同步,即相对于图像的位置应保持不变 我有点困惑,因为CALayer文档说明了层备份视图 “使用图层备份视图时,您不应直接与图层交互。相反,您必须
CALayer
在NSImageView
上添加注释。其目的是能够在图像上绘制形状(一个CALayer
),并在单独的视图中显示已高亮显示区域的信息。例如,用户可以在图像视图上绘制一个矩形,该区域下的像素可以放大并显示在另一个窗口中
我想了解一些关于使用CALayer
实现在图像视图顶部绘制的最佳方法的一般建议。如果视图调整大小,我希望选择区域的位置保持同步,即相对于图像的位置应保持不变
我有点困惑,因为CALayer文档说明了层备份视图
- “使用图层备份视图时,您不应直接与图层交互。相反,您必须使用标准视图编程实践。” 显然,这不是一个合适的选择,因为我想拥有图层并直接与之交互
- 使用图层宿主视图时,不应依赖该视图进行绘图,也不应向图层宿主视图添加子视图
因此,看起来视图应该是层宿主。但是,使我的NSImageView(子类)层成为宿主会阻止图像绘制,因为
依赖(我假设)于NSImageView
<代码>-drawRect:不随图层宿主视图调用。它还希望在视图为空时在视图中进行一些自定义绘图,例如占位符消息,为此我需要-drawRect:
-drawRect:
这似乎是一个黑客,所以我相信有一个更好的方法。当然,我可以在图像视图中绘制注释
-drawRect:
,但这会添加大量代码,我不想在不探索其他方法的情况下立即这样做。我所采用的解决方案是根本不改变NSImageView子类的层。相反,我向NSImageView子类添加了一个子视图,约束视图,使其与父视图具有相同的边界,然后使该子视图层成为宿主。然后可以将子层添加到此“注释”视图的层。通过这种方式,我可以在NSImageView的顶部进行注释