是否可以调整模糊半径和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)
可能,相关 - 但不回答我的问题:
尽管我不建议这样做,除非您准备好回退到它在未来版本中不起作用,但您可以使用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图层是视觉效果视图的直接后代,因此将来情况可能会发生变化。
| 归档时间: |
|
| 查看次数: |
1433 次 |
| 最近记录: |