我有一个层托管视图在一个定制NSView
子类设置是这样的:调用setNeedsDisplay:YES上层托管视图不重绘视图
[self setLayer:rootLayer];
[self setWantsLayer:YES];
我所有的子层添加到层树在每个子图层上调用setNeedsDisplay
之后。每个图层的内容由我的图层委托的drawLayer:inContext
方法提供。
这里是我的问题:
初始化我的观点后认为得到正确绘制。但是,当模型发生变化时,我从视图控制器呼叫[myCustomView setNeedsDisplay:YES];
,则不会调用drawLayer:inContext
。
我很困惑,现在如何更新视图:
- 我必须呼吁各的CALayer的
setNeedsDisplay
方法层树? - 在图层托管视图上不应该调用
setNeedsDisplay:YES
本身触发整个图层树的重绘?
感谢您的帮助。
编辑
我已经发现一些在的NSView类引用
阿层支持的观点是,通过核心动画层支持的图。任何由视图完成的绘图都会缓存在背景层中。您只需调用setWantsLayer:值为YES来配置层次支持的视图。视图类将自动为您创建一个支持图层,并使用视图类的绘图机制。当使用层次支持的视图时,您不应该直接与图层进行交互。
图层托管视图是包含您打算直接操作的核心动画图层的视图。通过实例化Core Animation图层类的实例并使用视图的setLayer:方法设置该图层,可以创建图层托管视图。完成之后,您将调用setWantsLayer:值为YES。当使用图层托管视图时,您不应该依赖该视图进行绘制,也不应该将子视图添加到图层托管视图。
在我来说,我有一个层托管视图。那么这是否确实意味着我必须手动触发重绘?我是否应该在自定义NSView中实现一个伪drawRect方法来调用更改后的CALayers上的相应setNeedsDisplay?
您的示例代码链接已损坏,也许这是替换:https://developer.apple.com/library/mac/samplecode/CoreAnimationKioskStyleMenu/Introduction/Intro.html#//apple_ref/doc/uid/ DTS40009512 – 2014-05-16 17:44:23