drawRect:并不总是在setNeedsDisplay之后调用:当父视图由图层支持时为YES

时间:2012-06-24 07:47:15

标签: cocoa calayer nsview drawrect setneedsdisplay

我有一个基本的Cocoa应用程序,其自定义NSCollectionView会覆盖drawRect:以绘制红色背景(仅供参考)。

我注意到,在看似随机的时间,虽然我调用drawRect:,但setNeedsDisplay:YES不会被调用。其他时候它工作,集合视图有红色背景。

花了我几个小时,但后来我终于发现在视图层次结构中,其中一个父视图是图层支持的视图(我已经签入了“核心动画层” Interface Builder为元素添加阴影。)

将父视图更改为不使用图层支持可立即解决问题,然后始终按预期调用drawRect:

让我感到困惑的是,在父视图上启用了图层支持后,有时会调用drawRect:,但并非总是如此。

如果父视图是由图层支持的,我是否应该假设我无法在任何子视图中可靠地覆盖 drawRect:

1 个答案:

答案 0 :(得分:1)

观看有关图层支持视图的WWDC 2012视频,并阅读-layerContentsRedrawPolicy的文档。听起来像你想要NSViewLayerContentsRedrawOnSetNeedsDisplay