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

joe*_*ick 6 macos cocoa objective-c appkit nsvisualeffectview

我想使用NSVisualEffectView黑暗的活力,但我觉得在某些情况下效果太苍白,所以我想让背景变暗.

这是一个示例应用程序,使用NSBox视图提供更暗的背景.

在此输入图像描述

我们可以看到NSBox"主要"外观设法覆盖背景,按钮快乐地位于其上方.但是,在NSBox自定义外观上,按钮似乎通过背景"剪切"到下面的视觉效果视图.

我已经尝试了子类化NSVisualEffectView和覆盖-drawRect:,用不同的颜色填充它,结果是一样的.

有没有办法在其他视图上叠加充满活力的控件?

Dim*_*iol 1

视觉效果视图似乎有两个重要的层:背景和色调。将这两个设置为“正确的”黑色似乎可以解决问题,但只要边界发生变化,您就需要这样做。

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;
    }
}
Run Code Online (Sandbox Code Playgroud)