Dav*_*eza 2 opacity nsview nswindow osx-yosemite
我正在为新的OS X Yosemite创建一个应用程序.我想创建一个在这个新版本中非常常见的效果,不透明度.例如,我想要的效果就像"Mail"应用程序中存在的效果一样.左视图(我们有"收件箱","已标记","已发送"等)具有背景模糊效果.
如何将此效果应用于我的应用程序?此效果适用于NSView或NSWindow?
谢谢!
Rob*_*ers 10
我自己正在寻找这个确切的东西,并设法找到一个答案,我将在这里发布,虽然这是一个相当古老的问题.
此方法模糊了视图及其所有子视图:
- (void)blurView:(NSView *)view
{
NSView *blurView = [[NSView alloc] initWithFrame:view.bounds];
blurView.wantsLayer = YES;
blurView.layer.backgroundColor = [NSColor clearColor].CGColor;
blurView.layer.masksToBounds = YES;
blurView.layerUsesCoreImageFilters = YES;
blurView.layer.needsDisplayOnBoundsChange = YES;
CIFilter *saturationFilter = [CIFilter filterWithName:@"CIColorControls"];
[saturationFilter setDefaults];
[saturationFilter setValue:@2.0 forKey:@"inputSaturation"];
CIFilter *blurFilter = [CIFilter filterWithName:@"CIGaussianBlur"]; // Other blur types are available
[blurFilter setDefaults];
[blurFilter setValue:@2.0 forKey:@"inputRadius"];
blurView.layer.backgroundFilters = @[saturationFilter, blurFilter];
[view addSubview:blurView];
[blurView.layer setNeedsDisplay];
}
Run Code Online (Sandbox Code Playgroud)
或者在Swift中:
private func blur(view: NSView!) {
var blurView = NSView(frame: view.bounds)
blurView.wantsLayer = true
blurView.layer?.backgroundColor = NSColor.clearColor().CGColor
blurView.layer?.masksToBounds = true
blurView.layerUsesCoreImageFilters = true
blurView.layer?.needsDisplayOnBoundsChange = true
var satFilter = CIFilter(name: "CIColorControls")
satFilter.setDefaults()
satFilter.setValue(NSNumber(float: 2.0), forKey: "inputSaturation")
var blurFilter = CIFilter(name: "CIGaussianBlur")
blurFilter.setDefaults()
blurFilter.setValue(NSNumber(float: 2.0), forKey: "inputRadius")
blurView.layer?.backgroundFilters = [satFilter, blurFilter]
view.addSubview(blurView)
blurView.layer?.needsDisplay()
}
Run Code Online (Sandbox Code Playgroud)
此代码是根据此处的优秀教程进行调整和改编的.
| 归档时间: |
|
| 查看次数: |
2330 次 |
| 最近记录: |