gpt4 book ai didi

xcode - 使用 CALayers、层托管或层支持对 NSImageView 进行注释?

转载 作者:行者123 更新时间:2023-12-03 16:21:24 25 4
gpt4 key购买 nike

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

我想要一些关于使用 CALayer 实现在 ImageView 顶部绘图的最佳方法的一般建议。如果调整 View 大小,我希望选择区域的位置保持同步,即相对于图像的位置应保持不变。

我有点困惑,因为 CALayer 文档声明了层支持的 View

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

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

对于图层托管 View

  • “使用图层托管 View 时,不应依赖该 View 进行绘图,也不应向图层托管 View 添加 subview 。”

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

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

这看起来像是一种黑客行为,所以我确信有更好的方法。当然,我可以在 ImageView -drawRect: 中绘制注释,但这会添加大量代码,而且我不想在没有探索替代方案的情况下立即这样做。

最佳答案

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

关于xcode - 使用 CALayers、层托管或层支持对 NSImageView 进行注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17510942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com