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

时间:2011-01-08 18:26:31

标签: objective-c cocoa macos subclass nsview

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

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

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

3 个答案:

答案 0 :(得分:17)

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

- (void)drawRect:(NSRect)rect {
    [[NSColor clearColor] set];
    NSRectFill(rect);
}

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

答案 1 :(得分:10)

由于我的窗户不透明,所接受的答案对我不起作用。正如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
}

答案 2 :(得分:0)

Swift版本:

override func draw(_ dirtyRect: NSRect) {

    NSColor.clear.set()
    dirtyRect.fill()
}