gpt4 book ai didi

cocoa - 框架使用drawRect :; I need to use it on a layer-backed NSView. 如何更新?

转载 作者:行者123 更新时间:2023-12-03 17:47:09 30 4
gpt4 key购买 nike

根据NSView的drawRect的文档:

If your app manages content using its layer object instead, use the updateLayer method to update your layer instead of overriding this method.

我有一个 NSView ,其中包含框架提供的 subview ,它们都使用 drawRect: 进行绘制。这个框架提供的 View 是我需要一个层的 NSView 的 subview 。因为我的框架提供的 View 是层支持 View 的后代,所以通常不会调用 drawRect:,特别是在窗口处于事件或非事件状态的情况下( View 需要更新以反射(reflect)其(处于)事件状态)。

当然,如果我使包含 View 不受图层支持,则当窗口处于事件或非事件状态时会发生更新。

在不将框架修改为自定义分支的情况下,确保在框架提供的 View 中需要时发生 drawRect: 的最佳途径是什么?

谢谢。

2018 年 8 月 25 日编辑:

看起来技巧是将层次结构中的一个 View 设置为,例如 [view setCanDrawSubviewsIntoLayer:YES,根据文档,它使用所有 subview 的 drawRect : 将他们的绘图添加到自己的图层中。然而,这似乎只在 10.13 版本中有效,并在 10.14 测试版中被打破。我将继续寻找潜在的 API 更改,除非这是 10.14 Beta 版错误。

由于问题仍未解决,因此还没有真正得到解答。

最佳答案

不覆盖 -wantsUpdateLayer 以返回 true 的图层支持 View 仍使用 -drawRect: 绘制自身。您引用的文档使用“应该”来表示“应该,以获得最佳性能”。这不是必需的,只是推荐的。

View 通常不会仅仅因为包含的窗口已更改键或主要状态而重新绘制自身。您必须将它们标记为需要显示。或者框架应该这样做。

我怀疑当您的 View 没有图层支持时它起作用的原因是您将 View 标记为需要更新。由于非图层支持的 View 使用画家模型(从后到前)绘制到窗口的后备存储中,因此如果您的 View 重新绘制自身,则任何 subview 都必须在 View 绘制的顶部重新绘制自身。

如果框架的 View 需要在窗口的关键/主要状态发生变化时重绘,那么它们应该观察相关通知并将自己设置为需要显示。如果他们不这样做,那就是一个框架错误。您可以通过自己将它们标记为需要显示来解决此问题。

关于cocoa - 框架使用drawRect :; I need to use it on a layer-backed NSView. 如何更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51988472/

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