修复UIVisualEffectView额外的光线模糊是白色背景上的灰色

Apple提供了这个活的模糊视图类UIVisualEffectView并将其与UIBlurEffect一起使用,该UIBlurEffect采用三种可用的UIBlurEffectStyle

 enum UIBlurEffectStyle : Int { case ExtraLight case Light case Dark } 

现在为了演示目的,我使用LightExtraLight样式设置了两个效果视图:

 let lightBlur = UIBlurEffect(style: UIBlurEffectStyle.Light) let extraLightBlur = UIBlurEffect(style: UIBlurEffectStyle.ExtraLight) let lightView = UIVisualEffectView(effect: lightBlur) lightView.frame = CGRectMake(10, 30, 150, 150) self.view.addSubview(lightView) let extraLightView = UIVisualEffectView(effect: extraLightBlur) extraLightView.frame = CGRectMake(160, 30, 150, 150) self.view.addSubview(extraLightView) 

到目前为止,一切都如预期的那样,模糊了图像:

图片

还有一些关于颜色的工作:

黑色 红

但是当涉及到一个白色背景时,会发生这种情况:

白色

左侧的Light效果如预期的那样工作,但右侧的ExtraLight效果会在后面留下某种灰色方块。

现在的问题是:是否有任何一种技巧或方法可以使我在白色背景上使用额外的光线模糊效果(带有模糊支持),并去除那个丑陋的灰色阴影?

如果你只是想模糊,你的模糊视图将是静止的,你可以使用UIImageEffects类,并将tintColor更改为“全”白色:

 - (UIImage *)applyExtraLightEffect { UIColor *tintColor = [UIColor colorWithWhite:0.97 alpha:0.82]; return [self applyBlurWithRadius:20 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil]; } 

据我所知,你不能在UIVisualEffectView改变它。

你可以试试 :

 var visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light)) visualEffectView.frame = imageView.bounds imageView.addSubview(visualEffectView) 

简单的scheme

我可以find一个由Shannon Hughes的Blog Post启发的简单解决scheme。 只需将透明度的白色背景色添加到效果视图即可。 我不知道它是否像extraLight一样,但对我来说已经足够接近了。

 let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .light)) visualEffectView.frame = sectionHeaderView.bounds visualEffectView.backgroundColor = UIColor(white: 1.0, alpha: 0.9) sectionHeaderView.addSubview(visualEffectView) 
 let vc = UIViewController() vc.view.frame = self.view!.frame let efv = UIVisualEffectView(effect: UIBlurEffect(style: UIBlurEffectStyle.light)) efv.frame = vc.view.frame vc.view.addSubview(efv) self.addChildViewController(vc) self.view.addSubview(vc.view) // below method has a bug // self.present(vc, animated: true, completion:nil)