如何解决NSView 上的 SetNeedsDisplay 触发整个视图层次结构的重绘
我正在开发一个由 NSWindow 制作的应用程序,它拥有许多自定义子视图,可能不透明。 每当我在子视图上调用 SetNeedsDisplay: 或 SetNeedsDisplayInRect: 时,系统都会从父 NSWindows 的内容视图开始调用每个子视图的 drawRect。
如何避免?如何仅重绘脏子视图(它应该是默认行为)?在继承 NSView 时,我是否遗漏了什么?或者在设置父NSWindow的属性或样式?
谢谢
解决方法
可能不透明是麻烦的一点。任何非不透明视图都会触发整个视图层次结构的重绘,因为窗口必须将该视图背景恢复到原始状态。只有设置为不透明的视图可能不需要重绘其下方的任何其他内容。但是,如果不透明视图本身被其他视图部分覆盖,它们可能仍会触发“上方”重绘。
,好的,我想我已经想通了。似乎将所有子视图转换为层支持的视图可以解决问题。 考虑到 gpu 管理图层的方式以及执行图层合成的方式,这是合理的。 但我仍然不明白为什么,使用“经典”NSViews,无论它们是否不透明,兄弟或孩子,重叠与否,我不能在没有系统调用整个视图的重新绘制的情况下使单个视图无效窗口的视图层次
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。