gpt4 book ai didi

swift - 调整 NSVisualEffectView 模糊半径和透明度

转载 作者:搜寻专家 更新时间:2023-10-31 08:04:44 26 4
gpt4 key购买 nike

当应用于 NSWindow(Swift 或 Objective-C)时,是否可以调整 NSVisualEffectView 的模糊半径和透明度?我尝试了 NSVisualEffectMaterial 的所有变体(深色、中等、浅色)- 但这并不能解决问题。在下图中,我使用了 Apple 的非公开 API,左边是 CGSSetWindowBackgroundBlurRadius,右边是 NSVisualEffectView

enter image description here

我正在尝试实现左侧的外观,但似乎只能使用右侧的方法。

这是我的代码:

blurView.blendingMode = NSVisualEffectBlendingMode.BehindWindow
blurView.material = NSVisualEffectMaterial.Medium
blurView.state = NSVisualEffectState.Active
self.window!.contentView!.addSubview(blurView)

可能相关 - 但没有回答我的问题:

最佳答案

虽然我不会推荐这个,除非你准备好回退到它在未来的版本中不起作用,你可以使用以下子类 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];
}

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

关于swift - 调整 NSVisualEffectView 模糊半径和透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37231536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com