如何在视图顶部添加模糊视图?

She*_*lam 12 macos cocoa objective-c nsview nstableview

我有一个重新加载的NSTableView.在加载新数据时,我想用微调器添加一个子视图.我希望ontop上的视图是半透明的,并显示其下方的视图,模糊.我该怎么做呢?

Noa*_*oon 18

最简单的解决方案 - -bitmapImageRepEtc:比光栅化程度方法更适用于Mac OS - 是将叠加视图设置为使用核心动画支持图层,然后为该图层提供核心图像模糊滤镜.这是一种在整个Mac OS中使用的技术,从Dock菜单到菜单栏本身.Interface Builder使设置变得非常简单,但您也可以在代码中执行此操作,如下所示:

CALayer *backgroundLayer = [CALayer layer];
[backgroundView setLayer:backgroundLayer];
[backgroundView setWantsLayer:YES];

CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
[blurFilter setDefaults];

[backgroundView layer].backgroundFilters = [NSArray arrayWithObject:blurFilter];
Run Code Online (Sandbox Code Playgroud)

  • 啊,@ adib,发现它:将masksToClip设置为YES并且工作正常:) - 并且父视图也必须是图层支持的. (4认同)
  • 看起来这样只有在视图完全覆盖其下方的其他视图时才有效.当它仅部分覆盖它们时,视图下方的整个区域都会模糊. (3认同)