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