【问题标题】:osx: I set one subview alpha, but all its super views be alpha?osx:我设置了一个子视图 alpha,但它的所有超级视图都是 alpha?
【发布时间】: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);

}

在视图 UI 层次结构中:

然后运行

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

【问题讨论】:

  • "我发现所有的视图和窗口都是 alpha" 这不是英语。这是什么意思?
  • 你设置了窗口的背景色吗?如果是这样,对什么?您的视图是否从 -isOpaque 的覆盖错误地返回 YES?你在用活力吗?你能用这个自定义视图重现一个新项目的问题吗?
  • @ElTomato 对不起我的英语不好,我的意思是顶视图直接显示桌面,没有底部图像视图。
  • @KenThomases 是的,我复制了它。但我仍然不知道为什么。我将在我的问题中发布我的源代码。感谢您的帮助。
  • 如果从视图实现中注释掉整个drawRect 方法会发生什么?那么它会显示蓝色背景吗?

标签: objective-c macos nsview


【解决方案1】:

我换了

NSRectFill 

NSRectFillUsingOperation(dirtyRect, NSCompositeSourceOver);

然后右转。

【讨论】:

    猜你喜欢
    • 2012-03-24
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多