使用alpha填充NSView的颜色?

时间:2016-06-06 08:12:08

标签: objective-c macos nsview

我写了一个窗口和两个视图, 将窗口的背景颜色设置为蓝色, 并在view1中绘制图像, 并用带alpha的颜色填充view2,如下所示:

// AppDelegate中

[self.window setLevel:(NSStatusWindowLevel + 2)];
TestView *view1 = [[TestView alloc] initWithFrame:NSMakeRect(0, 0, self.window.frame.size.width, self.window.frame.size.height)];

TestView2 *view2 = [[TestView2 alloc] initWithFrame:NSMakeRect(0, 0, self.window.frame.size.width, self.window.frame.size.height)];


[self.window setContentView:view1];
[self.window.contentView addSubview:view2];

//视图1

   - (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];

    // Drawing code here.
    NSImage *image = [NSImage imageNamed:@"testImage"];
    [image drawInRect:dirtyRect];
    }

//视图2

- (void)drawRect:(NSRect)dirtyRect {
    [super drawRect:dirtyRect];

    // Drawing code here.
    [[[NSColor redColor] colorWithAlphaComponent:0.5] set];
    NSRectFill(dirtyRect);
    }

但是当应用程序运行时,我发现我的窗口的背景颜色和View1的图像没有显示,只有view2显示,而且它是透明的,通过它可以看到桌面。

如果我没有添加subview view2,则应用程序正常运行,蓝色背景颜色和图像。

有人知道为什么,真的感谢你的帮助,我会在线等。

1 个答案:

答案 0 :(得分:2)

我将NSRectFill更改为

NSRectFillUsingOperation(dirtyRect, NSCompositeSourceOver);

然后它向右转。