如何使 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】:将NSView
的backgroundColor
设置为透明,例如:
你可以用这个方法
- (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 上的状态栏透明?