【发布时间】:2016-06-06 06:37:14
【问题描述】:
我写了一个window和两个subview,top subview的drawRect是这样的:
[[[NSColor redColor] colorWithAlphaComponent:0.5] set];
NSRectFill(NSMakeRect(100, 100, 200, 200));
底部的子视图是一个图像视图。 但是当我运行时,我发现所有的视图和窗口都是 alpha 的,顶部的子视图会以颜色显示桌面。
有人知道原因吗?感谢您的帮助。
我的代码结构是这样的: windowController 包括:window 和 viewcontroller。 viewcontroller 包括 view1 和 view2。 view1 是一个图像视图。 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;
}
在测试视图中
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
// Drawing code here.
[[[NSColor redColor] colorWithAlphaComponent:0.5] set];
NSRectFill(dirtyRect);
}
最后,它只有红色,但窗口的背景色是蓝色。
【问题讨论】:
-
"我发现所有的视图和窗口都是 alpha" 这不是英语。这是什么意思?
-
你设置了窗口的背景色吗?如果是这样,对什么?您的视图是否从
-isOpaque的覆盖错误地返回YES?你在用活力吗?你能用这个自定义视图重现一个新项目的问题吗? -
@ElTomato 对不起我的英语不好,我的意思是顶视图直接显示桌面,没有底部图像视图。
-
@KenThomases 是的,我复制了它。但我仍然不知道为什么。我将在我的问题中发布我的源代码。感谢您的帮助。
-
如果从视图实现中注释掉整个
drawRect方法会发生什么?那么它会显示蓝色背景吗?
标签: objective-c macos nsview