如何在NSVisualEffectView上叠加背景颜色并使用鲜明的控件?

时间:2014-10-23 11:05:41

标签: objective-c macos cocoa appkit nsvisualeffectview

我希望NSVisualEffectView使用黑暗的活力,但我觉得在某些情况下效果太淡了,所以我想让背景变暗。

以下是一个示例应用,使用NSBox视图提供更暗的背景。

enter image description here

我们可以看到NSBox'主要'外观设法覆盖背景,按钮愉快地坐在上面。但是,在具有自定义外观的NSBox上,按钮会显示为“剪切”字样。通过背景到下面的视觉效果视图。

我已经尝试了对NSVisualEffectView进行子类化并覆盖-drawRect:以使用不同的颜色填充它,结果是相同的。

有没有办法将鲜明的控件叠加在其他视图上?

1 个答案:

答案 0 :(得分:1)

视觉效果视图似乎有两个重要的层:背景和色调。将这两个设置为" right"黑色似乎可以解决这个问题,但是你必须在边界发生变化时随时做到这一点。

for (CALayer *sublayer in self.vibrancyView.layer.sublayers) {
    if ([sublayer.name isEqualToString:@"Backdrop"]) {
        NSLog(@"Backdrop: %@", sublayer.backgroundColor);
        sublayer.backgroundColor = [NSColor colorWithRed:0 green:0 blue:0 alpha:0.45].CGColor;
    } else if ([sublayer.name isEqualToString:@"Tint"]) {
        NSLog(@"Tint: %@", sublayer.backgroundColor);
        sublayer.backgroundColor = [NSColor colorWithRed:0 green:0 blue:0 alpha:1].CGColor;
    }
}