Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 使用Calayer、图层宿主或图层备份在NSImageView上进行注释?_Xcode_Macos_Cocoa_Core Animation - Fatal编程技术网

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:

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


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

我所采用的解决方案是根本不改变NSImageView子类的层。相反,我向NSImageView子类添加了一个子视图,约束视图,使其与父视图具有相同的边界,然后使该子视图层成为宿主。然后可以将子层添加到此“注释”视图的层。通过这种方式,我可以在NSImageView的顶部进行注释