调整NSVisualEffectView模糊半径和透明度

Coc*_*ffs 5 macos cocoa swift

是否可以调整模糊半径和NSVisualEffectView应用于NSWindow(Swift或Objective-C)时的透明度?我尝试了所有NSVisualEffectMaterial(黑暗,中等,浅色)的变化 - 但这并没有削减它.在下图中,我CGSSetWindowBackgroundBlurRadius在左侧和NSVisualEffectView右侧使用了Apple的非公共API .

在此输入图像描述

我试图看看左边的内容,但似乎我已经降级使用了正确的方法.

这是我的代码:

blurView.blendingMode = NSVisualEffectBlendingMode.BehindWindow
blurView.material = NSVisualEffectMaterial.Medium
blurView.state = NSVisualEffectState.Active
self.window!.contentView!.addSubview(blurView)
Run Code Online (Sandbox Code Playgroud)

可能,相关 - 但不回答我的问题:

Dim*_*iol 3

尽管我不建议这样做,除非您准备好回退到它在未来版本中不起作用,但您可以使用NSVisualEffectView以下子类来执行您想要的操作:

- (void)updateLayer
{
    [super updateLayer];

    [CATransaction begin];
    [CATransaction setDisableActions:YES];

    CALayer *backdropLayer = self.layer.sublayers.firstObject;

    if ([backdropLayer.name hasPrefix:@"kCUIVariantMac"]) {
        for (CALayer *activeLayer in backdropLayer.sublayers) {
            if ([activeLayer.name isEqualToString:@"Active"]) {
                for (CALayer *sublayer in activeLayer.sublayers) {
                    if ([sublayer.name isEqualToString:@"Backdrop"]) {
                        for (id filter in sublayer.filters) {
                            if ([filter respondsToSelector:@selector(name)] && [[filter name] isEqualToString:@"blur"]) {
                                if ([filter respondsToSelector:@selector(setValue:forKey:)]) {
                                    [filter setValue:@5 forKey:@"inputRadius"];
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    [CATransaction commit];
}
Run Code Online (Sandbox Code Playgroud)

虽然这本身并不使用私有 API,但它确实开始深入挖掘您不拥有的层层次结构,因此请务必仔细检查您返回的内容是否符合您的预期,如果不是,则优雅地失败。例如,在 10.10 Yosemite 上,该Backdrop图层是视觉效果视图的直接后代,因此将来情况可能会发生变化。