在cocoa上,为了确保视图有自己的层,应该将wantsLayer设置为true
wantsLayerwantsUpdateLayer的确切区别是什么?
据我所知,wantsLayer会导致视图开始使用层,而wantsUpdateLayer会改变视图的绘制方式(通过调用updateLayer而不是draw)。
如果不将wantsLayer设置为true,将wantsUpdateLayer设置为true有什么用?
如果已将wantsLayer设置为true,是否仍需要将true设置为wantsUpdateLayer
我应该在哪里与我的视图层交互?
这是不是应该只与updateLayer函数中的层交互?这是否适用于CALayer的所有属性和方法?例如,如果我想添加一个子层,是否也应该在updateLayer中完成?
编辑
此外,最新的appkit发行说明指出:
针对MacOS 10.14的应用程序应首选WantSupdateLayer属性
在wantslayer属性上。
那么这是否意味着在MacOS 10.14上,如果您已经在使用WantsUpdateLayer,那么实际上不需要使用WantsLayer?

最佳答案

wantslayer属性告诉您的nsview是否有一个层支持。默认情况下,nsviews没有默认的层支持。所以如果你需要一个图层(比如动画),你需要指定它。
wantsupdatelayer真的与众不同。nsview可以通过两种(独占)方式更新其内容:
通过调用drawrect:方法
通过调用updateLayer方法
默认情况下,wantsupdatelayer返回no,因此调用drawrect:。但是,如果您将wantsupdatelayer设置为返回yes(如果您的视图是层支持的),那么将调用updatelayer。
update layer可以比drawrect快得多:如果可以通过修改层属性来更新视图内容
所以要回答你的问题:
如果需要在DrawRect中绘制花哨的图形,则需要将wantslayer设置为yes,将wantsupdatelayer设置为no:(请记住,updatelayer速度更快,但只能修改层属性)
是,如果将wantsupdatelayer设置为“是”,则需要将wantslayer设置为“是”
您可以在任何需要的地方与层属性交互,包括从drawrect:

10-07 20:19