如何使 NSView 透明,但保留属于它的对象? [复制]

Posted

技术标签:

【中文标题】如何使 NSView 透明,但保留属于它的对象? [复制]【英文标题】:How to make the NSView transparent, but leave objects belonging to it as they were? [duplicate] 【发布时间】:2013-04-15 18:09:45 【问题描述】:

在我的应用程序中,我有一个 NSView,我将其用作绘图画布,以使用 NSBezierPath 绘制一些原始形状,如矩形和椭圆。现在我需要使我的画布透明,但我希望我绘制的形状具有与以前相同的不透明度。我很好奇是否可以这样做,如果可以,怎么做?!

编辑:

抱歉之前的描述很糟糕!

我的最终目标是能够在透明画布上绘制正常的饱和颜色形状。如果可能的话,我所说的透明是指完全清楚。当我绘制形状时,我的视图一直在重绘自己,所以即使在这些情况下,我也希望一切都像上面描述的那样。

感谢任何形式的帮助!

【问题讨论】:

你看到了吗:***.com/questions/1409285/… ? 我正在为 OSX 而不是 ios 开发 请描述“需要使我的画布透明”是什么意思。您是否希望您的窗口完全透明,以便您可以透过它看到下面的桌面,而只有您的形状是不透明的?或者,例如,您在添加形状时想要一个带有白色背景的不透明窗口,但是当视图自行打印时,白色背景应该是清晰的而不是纯白色?还是……? 抱歉描述不佳,刚刚编辑了帖子 目前尚不清楚 NSGod 列出(或任何其他)对“透明”的哪种解释是您正在使用的解释。好的,画布是“透明的”,那么我在它后面看到了什么?窗户背景?其他窗户?我的显示器后面的墙? 【参考方案1】:

要使窗口透明以使其后面的任何内容都能显示出来,请将窗口的 backgroundColor 设置为 [NSColor clearColor] 并将窗口的 opaque 设置为 NO

设置视图的opaque 是不必要的,因为默认情况下它已经是NO,而且这并不能满足您的需求。视图的opaque 属性与windows 的opaque 属性的含义不同。

clearColor 填充是不必要的,因为它所做的只是擦除您之前绘制的内容。如果您之前没有在此处画过任何东西,那么您正在擦除一块干净的板。

您的视图所做 绘制的任何内容(不是clearColor)仍将可见。

【讨论】:

天哪!太感谢了!!!我真的在寻找这个答案!【参考方案2】:

NSViewbackgroundColor 设置为透明,例如:

你可以用这个方法

- (void)drawRect:(NSRect)dirtyRect 
    // set any NSColor for filling, say white:
    [[NSColor clearColor] setFill];
    NSRectFill(dirtyRect);

参考:Best way to change the background color for an NSView

【讨论】:

[NSColor clearColor] 不一样吗? 这适用于 OS X,而不是 iOS:NSView 没有 backgroundColor 属性... 谢谢@NSGod 我有一个想法,不是正确的知识。再次感谢。 NSView 的 -layer 有一个背景颜色属性。如果你使用图层而不是 -drawRect: 来绘制,无论如何。

以上是关于如何使 NSView 透明,但保留属于它的对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不删除 Ionic 3 的情况下使 iOS 上的状态栏透明?

NSView 不显示更新

裁剪掉透明像素但保留偏移量

如何在 Android 上使图像透明?

导入SwiftUI时如何使NSView与CALayerDelegate兼容?

使 NSView 具有适合内容的固定宽度和可变高度