如何将NSVisualEffectView颜色与Window匹配

时间:2017-12-04 23:07:59

标签: swift macos cocoa nsvisualeffectview

我正在开发一个Swift 4 macOS应用程序,它涉及一个充满活力的黑暗窗口和一个窗口内的NSVisualEffectView。目前,NSVisualEffectView的颜色与窗口颜色不完全匹配,但它非常接近。

如何让NSVisualEffectView的颜色与窗口完美匹配?我的目标是让它提供的模糊效果仅在内容位于其下方时显示,并使其与窗口的颜色匹配才会产生此效果。我已经包含了当前正在发生的事情的图像。您可能需要放大图像并调高显示亮度以查看差异。虽然在这个屏幕截图中看起来很小,但NSVisualEffectView横跨整个窗口,而在Mac的Retina显示屏上,差异很明显。

我已尝试将NSVisualEffectView的背景颜色设置为清除,但这没有用。

visualEffectView.wantsLayer = true
visualEffectView.layer?.backgroundColor = NSColor.clear.cgColor

我对此有任何建议表示感谢!

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以将不透明的NSTextField作为子视图添加到NSVisualEffectView中。

效果在这里: https://img-blog.csdnimg.cn/20190514155202319.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xvdmVjaHJpczAw,size_16,color_FFFFFF,t_70

- (void)addBehindView{
    MSVisualEffectView *visualEffect = [[MSVisualEffectView alloc]initWithFrame:NSMakeRect(15, 15, 235, 300)];
    visualEffect.blendingMode = NSVisualEffectBlendingModeBehindWindow;
    visualEffect.state = NSVisualEffectStateActive;

    //NSVisualEffectMaterialUltraDark  NSVisualEffectMaterialDark
    visualEffect.material = NSVisualEffectMaterialMediumLight;
    self.window.contentView = visualEffect;

    self.visualEffect = visualEffect;


    NSTextField *label = [[NSTextField alloc]initWithFrame:NSMakeRect(0, 0, 400, 400)];
    label.editable = NO;
    label.stringValue = @"1243423";
    label.backgroundColor = [self colorWithHexString:@"4075F0"];
    label.alphaValue = 0.9;

    [self.visualEffect addSubview:label];
}