将NSView子类化为具有透明背景

And*_*w M 11 macos cocoa subclass objective-c nsview

我正在创建一个应用程序,我需要一个透明的NSView,里面有一个透明的PNG图像.问题是,我正在绘制的NSView上有一个灰色背景.我有它子类(作为TransparentRectangleView),但不知道在drawRect中放什么使它透明.

我已经重写了isOpaque方法以返回NO但它似乎没有帮助......

或者,是否已经存在类似于iPhone的UIImageView的子类NSView(只要我可以在里面添加子视图,我需要在里面添加一些文本).

ugh*_*fhw 17

要使视图透明,只需使用[NSColor clearColor]填充它.

- (void)drawRect:(NSRect)rect {
    [[NSColor clearColor] set];
    NSRectFill(rect);
}
Run Code Online (Sandbox Code Playgroud)

isOpaque的默认实现返回NO,因此如果您是NSView的子类而不是其他视图,则无需担心覆盖它.

  • 顺便说一下,我有理由相信如果你把`drawRect:`清空,你会得到同样的效果,因为你什么都不会画.合理肯定=确定,因为我经常这样做. (4认同)

lk_*_*_vc 11

由于我的窗户不透明,所接受的答案对我不起作用.正如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
}
Run Code Online (Sandbox Code Playgroud)


seb*_*mel 8

斯威夫特版本:

override func draw(_ dirtyRect: NSRect) {

    NSColor.clear.set()
    dirtyRect.fill()
}
Run Code Online (Sandbox Code Playgroud)