如何在一个视图之上添加模糊效果的视图?

12

我有一个NSTableView需要重新加载数据。在加载新数据时,我想添加一个带有旋转图标的子视图叠加在其上。我希望叠加的视图半透明并且使下面的视图变模糊。我应该怎么做?

4个回答

18

最简单的解决方法是将你的覆盖视图设置为使用Core Animation支持层,然后给该层添加一个核心图像模糊滤镜。这种技术在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];

3
似乎只有当视图完全覆盖其他位于下方的视图时,这才有效。当它只部分覆盖它们时,视图下方的整个区域都会变模糊。 - adib
抱歉让这个问题又浮出水面 - 'setLayer' 方法依赖于哪些框架? - capikaw
@adib - 你知道那个问题的任何解决方法吗? - Raffael
4
啊,@adib,我找到了:将masksToClip设置为YES就可以了 :) ——并且父视图也必须是层支持的。 - Raffael

3

2
基本技术是拍摄您视图的图像,使用类似于 NSView‑bitmapImageRepForCachingDisplayInRect: 方法,处理该图像以使其模糊(Core Image 在此处非常有用),然后使用包含模糊图像的 NSImageView 覆盖您的视图。
当然,这是虚假的,但这就是表演艺术的精髓 :-)

-3

你尝试过更改视图的Alpha属性(透明度)吗? 此外,这里有一个关于模糊视图的链接: UIView的模糊效果


1
我更愿意称这个为像素化而不是模糊。 - Konrad77

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接