我知道在Cocoa中可以创建透明窗口,但是是否可以模糊其后面的内容呢?我知道已经有类似问题的链接,但它们更多地处理实际NSView内部的模糊,而不是其后面的内容。这是否可能,如果可能的话,我需要研究哪种方法?
Possible Impossible?
Possible Impossible?
我想设置半径和颜色,因此我的贡献是在自定义视图中进行操作以模糊背景。希望对你有所帮助。
view.wantsLayer = true
view.layerUsesCoreImageFilters = true
view.layer?.backgroundColor = NSColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 0.5).CGColor
let blurFilter = CIFilter(name: "CIGaussianBlur")
blurFilter?.setDefaults()
blurFilter?.setValue(2.5, forKey: kCIInputRadiusKey)
view.layer?.backgroundFilters?.append(blurFilter!)
NSWindow
进行了子类化以禁用不透明度,然后使用位于Xcode实用工具侧边栏的视图效果检查器向NSView
添加了背景过滤器:高斯模糊(您可以更改radius
值以获得更多或更少的模糊效果)。NSView
进行子类化即可。[self.window setOpaque:NO];
禁用不透明度,并使用[self.window setBackgroundColor:[NSColor clearColor]];
将背景颜色设置为透明。然后,添加高斯模糊作为背景滤镜时,不会像NSVisualEffectView那样使用后面的窗口图形来创建扩散/活力。 - VolomikeNSVisualEffectView
代替NSView
,而不是应用CIFilters并将APP大小增加至少60MB。选择要模糊的参考对象并设置其材料,以便选择适当的颜色或窗口背景进行模糊处理。NSVisualEffectView *viewWithFX = [[NSVisualEffectView alloc] initWithFrame:NSMakeRect(0, 0, frameRect.size.width, 100)];
viewWithFX.autoresizingMask = NSViewWidthSizable | NSViewMinXMargin | NSViewMaxXMargin;
viewWithFX.translatesAutoresizingMaskIntoConstraints = YES;
viewWithFX.material = NSVisualEffectMaterialSidebar; // or NSVisualEffectMaterialMenu, or ..
viewWithFX.blendingMode = NSVisualEffectBlendingModeBehindWindow; //NSVisualEffectBlendingModeWithinWindow
[viewWithFX addSubview:<#subviews-will-not-have-fx-applied#>];
[self.view addSubview:viewWithFx];