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

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

编辑:

抱歉之前的描述很糟糕!

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

感谢任何形式的帮助!

【问题讨论】:

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

标签: objective-c macos cocoa nsview


【解决方案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: 来绘制,无论如何。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 2018-02-10
  • 2019-12-25
相关资源
最近更新 更多