可可NSView模糊背景

时间:2014-05-23 05:39:34

标签: objective-c macos cocoa nsview

我知道在Cocoa中创建透明窗口是可能的,虽然有可能模糊背后的东西吗?我知道有similar questions,但它们会更加模糊实际NSView中的内容,而不是它背后的内容。这是否可能,如果是这样,我需要研究哪种方法?

Possible Impossible?

Possible                      Impossible?

3 个答案:

答案 0 :(得分:1)

为了回答你,是的,可能。

如果您想要这种效果,请查看我创建的GitHub Project。为了禁用不透明度,我将NSWindow子类化,然后使用位于Xcode Utilities侧栏的View Effects Inspector向NSView添加了背景过滤器:高斯模糊(您可以更改radius }或多或少模糊效果的值)。

如果您想要新的Yosemite View效果,请查看他们发布的新课程NSVisualEffectView,只需将您想要使用此效果的NSView作为子类。

希望您的答案有用。

致以最诚挚的问候,

答案 1 :(得分:0)

我的贡献因为我想设置半径和颜色。

在自定义视图中执行此操作以模糊背后的内容。 HTH

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!)

答案 2 :(得分:0)

从 2021 年开始,您只需使用 NSVisualEffectView 来交换您的 NSView,而不是应用 CIFilters 并将您的应用程序大小增加至少 60MB 以获得模糊效果。选择要模糊到的参考并设置您编码的材质以选择模糊将基于的适当颜色。

NSVisualEffectView *viewWithFX = [[NSVisualEffectView alloc] initWithFrame:NSMakeRect(0, 0, frameRect.size.width, 100)];
viewWithFX.autoresizingMask = NSViewWidthSizable | NSViewMinXMargin | NSViewMaxXMargin;
viewWithFX.material = NSVisualEffectMaterialSidebar; //NSVisualEffectMaterialMenu;//
viewWithFX.blendingMode = NSVisualEffectBlendingModeBehindWindow; //NSVisualEffectBlendingModeWithinWindow;
[viewWithFX addSubview:<NSView-here-will-not-have-fx-applied>];

[self.view addSubview:viewWithFx];

它的优点是不需要层,而且比 CIFilters 更快。 PS:这将使您的应用程序大小增加约 8..12MB。