NSView 和 CALayer
NSView and CALayer
在Cocoa上,为了确保视图有自己的图层,您应该将wantsLayer
设置为true
。
wantsLayer
和 wantsUpdateLayer
的确切区别是什么?
据我了解,wantsLayer
导致视图开始使用图层,而 wantsUpdateLayer
改变了视图的绘制方式(通过调用 updateLayer
而不是 draw
)。
将 wantsLayer
设置为真而不将 wantsUpdateLayer
设置为真有什么用?
如果 wantsUpdateLayer
设置为 true,还需要将 wantsLayer
设置为 true
吗?
我应该在哪里与我的视图层交互?
您应该只在 updateLayer
函数中与您的层进行交互,这对吗?这是否适用于每个 属性 和 CALayer
的方法?例如,如果我想添加一个子层,是否也应该在 updateLayer
中完成?
编辑
此外,最新的 AppKit 发行说明指出:
Apps targeting macOS 10.14 should prefer the wantsUpdateLayer property
over the wantsLayer property.
这是否意味着在 macOS 10.14 上,如果您已经在使用 wantsUpdateLayer,则实际上不需要使用 wantsLayer ?
wantsLayer 属性 告诉你的 NSView 是否有层支持。默认情况下,NSViews 默认支持 not 层。所以如果你需要一个图层(例如动画),你需要指定它。
wantsUpdateLayer 真的不一样。 NSView 可以通过两种(独家)方式更新其内容:
- 通过调用 drawRect: 方法
- 通过调用 updateLayer 方法
默认 wantsUpdateLayer returns NO,因此调用 drawRect:。但是如果您将 wantsUpdateLayer 设置为 return YES(并且如果您的视图是图层支持的),那么将改为调用 updateLayer。
updatelayer 可以比 drawRect 快得多:如果你可以通过修改图层属性来更新你的视图内容
所以回答你的问题:
- 如果需要在 drawRect 中进行花式绘制,则需要将 wantsLayer 设置为 YES,将 wantsUpdateLayer 设置为 NO:(请记住,updateLayer 速度更快,但您只能修改图层属性)
- 是的,如果将 wantsUpdateLayer 设置为 YES,则需要将 wantsLayer 设置为 YES
- 您可以在任何需要的地方与图层属性进行交互,包括来自 drawRect:
在Cocoa上,为了确保视图有自己的图层,您应该将wantsLayer
设置为true
。
wantsLayer
和 wantsUpdateLayer
的确切区别是什么?
据我了解,wantsLayer
导致视图开始使用图层,而 wantsUpdateLayer
改变了视图的绘制方式(通过调用 updateLayer
而不是 draw
)。
将 wantsLayer
设置为真而不将 wantsUpdateLayer
设置为真有什么用?
如果 wantsUpdateLayer
设置为 true,还需要将 wantsLayer
设置为 true
吗?
我应该在哪里与我的视图层交互?
您应该只在 updateLayer
函数中与您的层进行交互,这对吗?这是否适用于每个 属性 和 CALayer
的方法?例如,如果我想添加一个子层,是否也应该在 updateLayer
中完成?
编辑 此外,最新的 AppKit 发行说明指出:
Apps targeting macOS 10.14 should prefer the wantsUpdateLayer property over the wantsLayer property.
这是否意味着在 macOS 10.14 上,如果您已经在使用 wantsUpdateLayer,则实际上不需要使用 wantsLayer ?
wantsLayer 属性 告诉你的 NSView 是否有层支持。默认情况下,NSViews 默认支持 not 层。所以如果你需要一个图层(例如动画),你需要指定它。
wantsUpdateLayer 真的不一样。 NSView 可以通过两种(独家)方式更新其内容:
- 通过调用 drawRect: 方法
- 通过调用 updateLayer 方法
默认 wantsUpdateLayer returns NO,因此调用 drawRect:。但是如果您将 wantsUpdateLayer 设置为 return YES(并且如果您的视图是图层支持的),那么将改为调用 updateLayer。
updatelayer 可以比 drawRect 快得多:如果你可以通过修改图层属性来更新你的视图内容
所以回答你的问题:
- 如果需要在 drawRect 中进行花式绘制,则需要将 wantsLayer 设置为 YES,将 wantsUpdateLayer 设置为 NO:(请记住,updateLayer 速度更快,但您只能修改图层属性)
- 是的,如果将 wantsUpdateLayer 设置为 YES,则需要将 wantsLayer 设置为 YES
- 您可以在任何需要的地方与图层属性进行交互,包括来自 drawRect: