我正在创建一个应用程序,其中需要一个带有透明PNG图像的透明NSView。问题是,我正在绘制的NSView具有灰色背景。我已经将其子类化(作为TransparentRectangleView),但不知道在drawRect中放什么来使其透明。
我已经覆盖了isOpaque方法以返回NO,但似乎没有帮助......
或者,是否已经存在一个类似于iPhone的UIImageView的子类化NSView(只要我可以在其中添加子视图,我需要在其中添加一些文本)。
我正在创建一个应用程序,其中需要一个带有透明PNG图像的透明NSView。问题是,我正在绘制的NSView具有灰色背景。我已经将其子类化(作为TransparentRectangleView),但不知道在drawRect中放什么来使其透明。
我已经覆盖了isOpaque方法以返回NO,但似乎没有帮助......
或者,是否已经存在一个类似于iPhone的UIImageView的子类化NSView(只要我可以在其中添加子视图,我需要在其中添加一些文本)。
为了使视图透明,只需用 [NSColor clearColor] 填充它即可。
- (void)drawRect:(NSRect)rect {
[[NSColor clearColor] set];
NSRectFill(rect);
}
isOpaque的默认实现返回NO,所以如果你正在子类化NSView而不是其他视图,你不需要担心覆盖它。
drawRect:
保留为空,则可以获得相同的效果,因为你不会画任何东西。 相当确定=确定,因为我经常这样做。 - d11wtqmain.m
,使用 clang -framework Cocoa -o windowtest main.m
进行编译,并使用 ./windowtest
运行。这是输出的样子:https://s29.postimg.org/6a4mv566f/so_4635442.png 窗口左上角看起来像有一个透明的 NSView 吗?不是的。但这正是你的代码在非不透明窗口上所做的事情,除非内容视图是分层的(默认情况下它不是)。 - Mecki对我来说最佳答案不可行,因为我的窗口是不透明的。如http://www.drissman.com/blog/archives/2009/10/09/nsrectfill_and_nscolor_clearcolor.html(以及下面的讨论)所述,以下代码有效:
- (void)drawRect:(NSRect)rect {
[[NSColor clearColor] set];
NSRectFillUsingOperation(rect, NSCompositeSourceOver);
// do other drawings
}
[NSBezierPath fillRect:]
没有什么不同,并且比NSRectFill
效率和效果都差一些,后者(不寻常地)使用了“ NSCopyCompositeOperation”。正如d11wtq在被接受的答案中所说,这也不是必要的-视图本身已经是透明的,除非你另外绘制。 - Peter HoseySwift版本:
override func draw(_ dirtyRect: NSRect) {
NSColor.clear.set()
dirtyRect.fill()
}