setOpaque:NO与setBackgroundColor:[NSColor clearColor]有什么区别?

4
我正在学习通过子类化NSWindow来绘制自定义[形状]窗口的教程。
教程中指出,在初始化器中,开发者应该执行以下操作:
[self setOpaque:NO];
[self setBackgroundColor:[NSColor clearColor]];

我在想这两条消息之间有什么区别,为什么需要同时使用它们,因为它们的结果是相同的。
参考资料:教程可以在这里找到
2个回答

9

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


2
在非透明窗口中,您可以使用[self setOpaque:YES];来加速绘制。 - Abizern

4
所以我想知道这两个消息之间的区别以及为什么它们都是必需的,因为它们的结果是相同的。
它们并不相同。
查看opaque属性的文档:这是告诉NSView您将在整个边界内绘制,完全覆盖视图下方任何内容的方法。
如果您没有覆盖整个边界,或者您不能始终以100%的不透明度绘制,则您的视图不是不透明的,并且应将该属性设置为NO
如果将视图的背景颜色设置为clearColor(这只是一个透明度为0%的颜色),并且没有在整个背景上以100%的不透明度绘制,则您的视图不是不透明的。
另一方面,可以将clearColor作为背景,然后完全覆盖它,在这种情况下,您的视图是不透明的,并且应将自己设置为这样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接