只是好奇这是否可行.现在这是样本的MAAttachedWindow样子:

但是,我想知道我是否可以模糊窗口背后的背景,如下所示:

这可能不使用私有API吗?
请求代码.那么,这就是MAAttachedWindow的工作原理.你只需要为它提供一个自定义的NSView,剩下的就是它.所以,这就是我试图模糊的方式:
CALayer *backgroundLayer = [CALayer layer];
[view setLayer:backgroundLayer];
[view setWantsLayer:YES];
CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
[blurFilter setDefaults];
[view layer].backgroundFilters = [NSArray arrayWithObject:blurFilter];
Run Code Online (Sandbox Code Playgroud) 对于旧版本的Swift/Xcode,似乎有很多问题,但由于某种原因,它还没有使用最新的更新.我创建了一个NSVisualEffectView,blurryView,并将子视图添加到我的主视图中:
class ViewController: NSViewController {
@IBOutlet weak var blurryView: NSVisualEffectView!
override func viewDidLoad() {
super.viewDidLoad()
//background styling
blurryView.wantsLayer = true
blurryView.blendingMode = NSVisualEffectBlendingMode.behindWindow
blurryView.material = NSVisualEffectMaterial.dark
blurryView.state = NSVisualEffectState.active
self.view.addSubview(blurryView, positioned: NSWindowOrderingMode.above, relativeTo: nil)
// Do any additional setup after loading the view.
}
...
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,窗口没有任何影响.(当我将它设置在窗口内,并将其叠加在我的另一个视图之上时,模糊工作正常,但我只希望窗口模糊.)我也尝试在App Delegate类中执行相同的操作,但我可以将我的窗口连接为插座,因此无法将模糊视图添加到窗口.这是代码的样子:
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
blurryView.wantsLayer = true
blurryView.blendingMode = NSVisualEffectBlendingMode.withinWindow
blurryView.material = NSVisualEffectMaterial.dark
blurryView.state = NSVisualEffectState.active
self.window.contentView?.addSubview(blurryView)
} …Run Code Online (Sandbox Code Playgroud)