[self setLayer:rootLayer];[self setWantsLayer:YES];
在每个子图层上调用setNeedsdisplay后,我将所有子图层添加到图层树中.每个图层的内容由我的图层委托的drawLayer:inContext方法提供.
这是我的问题:
初始化视图后,视图会正确绘制.但是,当模型发生变化时我调用[myCustomVIEw setNeedsdisplay:YES];从我的视图控制器中不调用drawLayer:inContext.
我现在很困惑如何更新视图:
>我是否必须在图层树中的每个CALayer上调用setNeedsdisplay方法?
>不应该在图层托管视图本身上调用setNeedsdisplay:YES来触发整个图层树的重绘吗?
谢谢你的帮助.
编辑
我在NSVIEw Class引用中找到了一些东西
A layer-backed vIEw is a vIEw that is backed by a Core Animation layer. Any drawing done by the vIEw is the cached in the backing layer. You configured a layer-backed vIEw by simply invoking setWantsLayer: with a value of YES. The vIEw class will automatically create the a backing layer for you,and you use the vIEw class’s drawing mechanisms. When using layer-backed vIEws you should never interact directly with the layer.
A layer-hosting vIEw is a vIEw that contains a Core Animation layer that you intend to manipulate directly. You create a layer-hosting vIEw by instantiating an instance of a Core Animation layer class and setting that layer using the vIEw’s setLayer: method. After doing so,you then invoke setWantsLayer: with a value of YES. When using a layer-hosting vIEw you should not rely on the vIEw for drawing,nor should you add subvIEws to the layer-hosting vIEw.
link to documentation
在我的情况下,我有一个图层托管视图.那么这确实意味着我必须手动触发重绘吗?我应该在自定义NSVIEw中实现一个伪drawRect方法来调用更改的CALayers上的相应setNeedsdisplay吗?
解决方法 在Apple的 sample code自助式菜单中进一步研究后,我发现如果您使用的是图层托管视图,则必须自行处理由于模型更改而需要的屏幕更新.在NSVIEw上调用setNeedsdisplay:YES将不会执行任何 *** 作.因此,如果必须更新视图,则必须要编写像reloadData这样的方法,并且在其中应该调用setNeedsdisplayon每个需要刷新的CALayer.我仍然不确定根层上对此方法的调用是否会传播到所有子层,但我不这么认为.
我现在通过在需要重新缓存的单个CALayers上调用setNeedsdisplay来解决问题.它没有问题.
总结以上是内存溢出为你收集整理的cocoa – 在图层托管视图上调用setNeedsDisplay:YES不会重绘视图全部内容,希望文章能够帮你解决cocoa – 在图层托管视图上调用setNeedsDisplay:YES不会重绘视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)