0

我正在开发一个由 NSWindow 制作的应用程序,它拥有很多自定义子视图,可能不透明。每当我在子视图上调用 SetNeedsDisplay: 或 SetNeedsDisplayInRect: 时,系统都会从父 NSWindows 的内容视图开始调用每个子视图的 drawRect。

如何避免?我怎样才能只重绘脏子视图(它应该是默认行为)?在继承 NSView 时,我可能缺少什么东西吗?还是在设置父 NSWindow 的属性或样式?

谢谢

4

2 回答 2

0

可能不透明的问题是一些麻烦。任何非透明视图都会触发整个视图层次结构的重绘,因为窗口必须将该视图背景恢复为原始状态。只有设置为不透明的视图可能不需要重绘它们下面的任何其他内容。但是,如果不透明视图本身被其他视图部分覆盖,它们可能仍会触发“上方”重绘。

于 2021-03-02T14:43:07.443 回答
0

好吧,我想我已经想通了。似乎将所有子视图转换为支持层的视图就可以了。这是合理的,给出了由 gpu 管理层的方式以及如何执行层合成。但是我仍然不明白为什么,使用“经典” NSViews,无论它们是否不透明,兄弟姐妹或孩子,重叠与否,如果没有系统调用重新绘制整个视图,我都无法使单个视图无效查看窗口的层次结构

于 2021-03-04T10:19:49.990 回答