4

我正在阅读关于通过子类化 NSWindow 用可可绘制自定义 [形状] 窗口的教程。

本教程指出,在初始化程序中,开发人员应该执行以下操作:

[self setOpaque:NO];
[self setBackgroundColor:[NSColor clearColor]];

所以我想知道这两条消息之间有什么区别,为什么它们都需要因为它们的结果是相同的。

参考:教程可以在这里找到

4

2 回答 2

9

我想第一条消息是必需的,因为绘图系统需要知道它是否应该打扰更新位于你后面的视图。例如,如果另一个应用程序中的窗口(在您的窗口后面)更新(例如出现文本等),窗口系统通常不需要重绘它,但由于您的窗口是透明的,所以在这种情况下它会这样做。

于 2009-09-26T07:57:37.700 回答
4

所以我想知道这两条消息之间有什么区别,为什么它们都需要因为它们的结果是相同的。

他们不一样。

查看该opaque属性的文档:这是您告诉 NSView 您将在整个范围内绘制的方式,完全覆盖您视图下方的任何内容。

如果您没有覆盖整个边界,或者您并不总是以 100% 不透明度绘制,那么您的视图不是不透明的,您应该将该属性设置为NO.

如果您将视图的背景颜色设置为clearColor(这只是一种不透明度为 0% 的颜色),并且不在整个背景上以 100% 的不透明度绘制,那么您的视图不是不透明的。

另一方面,可以将其clearColor作为您的背景,然后在其上完全绘制,在这种情况下,您的视图是不透明的,应该将自己设置为这样。

于 2009-09-26T15:42:24.500 回答