osx:我设置了一个子视图alpha,但它的所有超级视图都是alpha?

时间:2016-06-06 06:37:14

标签: objective-c macos nsview

我写了一个窗口和两个子视图,顶级子视图的drawRect如下:

[[[NSColor redColor] colorWithAlphaComponent:0.5] set];
NSRectFill(NSMakeRect(100, 100, 200, 200));

,底部子视图是图像视图。 但是当我跑步时,我发现所有的视图和窗口都是alpha,顶级子视图会显示带有颜色的桌面。

有人知道原因吗?谢谢你的帮助。

我的代码结构如下: windowController包括:window和viewcontroller。 viewcontroller包括view1和view2。 view1是一个imageview。 view2我什么都没写,只是用之前的代码覆盖drawRect。

我以前写过这些,但没有遇到这个问题,所以我真的很困惑。

当我检查视图UI层次结构时,我发现它是正确的。

我在我的测试项目中重现了这个问题,这是我的测试项目:

在appDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
TestViewController *controller = [[TestViewController alloc] initWithFrame:NSMakeRect(0, 0, self.window.frame.size.width, self.window.frame.size.height)];
[self.window setBackgroundColor:[NSColor blueColor]];
[self.window setContentView:controller.view];  

}

在TestViewController中

- (instancetype)initWithFrame:(NSRect)frame {
self = [super init];
if (self) {
    TestView *view = [[TestView alloc] initWithFrame:frame];
    self.view = view;
}
return self;

}

在TestView中

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

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

}

在视图UI层次结构中:  enter image description here

然后跑 enter image description here

最后,它只是红色,但窗口的背景颜色是蓝色。

1 个答案:

答案 0 :(得分:0)

我改变了

NSRectFill 

NSRectFillUsingOperation(dirtyRect, NSCompositeSourceOver);

然后它向右转。