【发布时间】:2011-07-11 22:08:34
【问题描述】:
我有一个重新加载的 NSTableView。在加载新数据时,我想在它上面添加一个带有微调器的子视图。我希望顶部的视图是半透明的,并显示它下面的视图,使其模糊。我该怎么做呢?
【问题讨论】:
标签: objective-c cocoa macos nstableview nsview
我有一个重新加载的 NSTableView。在加载新数据时,我想在它上面添加一个带有微调器的子视图。我希望顶部的视图是半透明的,并显示它下面的视图,使其模糊。我该怎么做呢?
【问题讨论】:
标签: objective-c cocoa macos nstableview nsview
您是否尝试过更改视图的 Alpha 属性(用于透明度)? 这里还有一个关于模糊视图的链接: Blur Effect for UIView
【讨论】:
基本技术是拍摄您的视图的图像,使用类似于NSView 的‑bitmapImageRepForCachingDisplayInRect: 方法,处理该图像使其模糊(Core Image 是您的朋友),然后覆盖您的视图包含模糊图像的NSImageView。
这当然是假的,但这就是表演的意义:-)
【讨论】:
最简单的解决方案——明显比-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];
【讨论】:
你应该在guthub上查看RMBlurredView:https://github.com/raffael/RMBlurredView
这是一个易于使用的 NSView 子类,可以为您完成所有这些工作。请务必在您的父视图上设置setWantsLayer:YES!
有关详细信息,请查看 Cocoanetics 文章:http://www.cocoanetics.com/2013/10/blurring-views-on-mac/
【讨论】: