setOpaque:NO vs setBackgroundColor:[NSColor clearColor]

时间:2009-09-26 07:17:54

标签: objective-c cocoa nswindow

我正在通过子类化NSWindow来完成一个关于使用cocoa绘制自定义[形状]窗口的教程。

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

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

所以我想知道这两条消息之间的差异是什么?为什么它们需要两者,因为它们的结果是相同的。

参考文献:教程可以是found here

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:4)

  

所以我想知道这两条消息之间的差异是什么?为什么它们需要两者,因为它们的结果是相同的。

他们不一样。

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

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

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

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