当NSVisualEffectView应用于NSWindow (Swift或Objective)时,是否有可能调整它的模糊半径和透明度?我尝试了NSVisualEffectMaterial的所有变体(暗、中、轻)--但这并没有削减它。在下面的图片中,我使用了苹果的非公共API,左边是CGSSetWindowBackgroundBlurRadius,右边是NSVisualEffectView。

我试图达到左边的样子,但我似乎被降级使用右边的方法。
这是我的密码:
blurView.blendingMode = NSVisualEffectBlendingMode.BehindWindow
blurView.material = NSVisualEffectMaterial.Medium
blurView.state = NSVisualEffectState.Active
self.window!.contentView!.addSubview(blurView)可能是相关的,但没有回答我的问题:
发布于 2016-05-15 03:24:11
虽然我不建议这样做,除非您已经准备好在将来的发行版中重新使用它,但是您可以使用下面的子类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];
}尽管这本身并不使用私有API,但它确实开始深入到您不拥有的层层次结构中,因此请确保再次检查您要得到的是您所期望的,如果不是,则会优雅地失败。例如,在10.10 Yosemite上,Backdrop层是视觉效果视图的直接死者,因此未来的情况可能会发生变化。
发布于 2020-07-20 22:48:13
我和你有同样的问题,我用一个小把戏解决了这个问题,似乎完成了我想要的工作。我希望它也能对你有所帮助。
因此,在我的例子中,我在故事板中添加了NSVisualEffectView,并将其属性设置为:

我的视图层次如下:

所有减少模糊度的方法都是在NSViewController中:
override func viewWillAppear() {
super.viewWillAppear()
//Adds transparency to the app
view.window?.isOpaque = false
view.window?.alphaValue = 0.98 //tweak the alphaValue for your desired effect
}在下面的示例中,除了上面的调整之外,这段代码还可以工作:
let blurView = NSVisualEffectView(frame: view.bounds)
blurView.blendingMode = .behindWindow
blurView.material = .fullScreenUI
blurView.state = .active
view.window?.contentView?.addSubview(blurView)对于任何感兴趣的人来说,Swift 5代码都是指向我的回购的链接,我在那里创建了一个小恶作剧应用程序,它使用了上面的代码:GitHub链路
https://stackoverflow.com/questions/37231536
复制相似问题