Fin*_*ida 10 ios swift uivisualeffectview
Apple提供了这个实时模糊视图类UIVisualEffectView,你可以使用它UIBlurEffect来获取三个可用UIBlurEffectStyle的一个:
enum UIBlurEffectStyle : Int {
case ExtraLight
case Light
case Dark
}
Run Code Online (Sandbox Code Playgroud)
现在用于演示目的我建立与风格两个花纹的意见Light和ExtraLight:
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)
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,一切都按预期工作,它们模糊图像:
还有一些关于颜色的工作:
但是当遇到白色背景时会发生这种情况:
在Light对预期左侧的作品,但效果ExtraLight右侧叶效果某种灰色方块的后面.
现在的问题是:是否有任何一种技巧或方法可以让我在白色背景上使用额外的光线模糊效果(支持实时模糊)并删除那个丑陋的灰色阴影?
据我所知,附加色调是UIVisualEffectView该类的内置功能。如果您使用 Xcode 检查视图层次结构,您可以看到视觉效果视图实例中有两个默认子视图:UIVisualEffectBackdropView和UIVisualEffectSubview. (我假设这些是私有类。)如果您检查,UIVisualEffectSubview您可以看到它具有导致您注意到的不需要的色调的背景颜色。
我不确定是否有官方支持的删除它的方法,但是您可以通过过滤到私有子视图的名称来修改此背景颜色:
if let vfxSubView = visualEffectView.subviews.first(where: {
String(describing: type(of: $0)) == "_UIVisualEffectSubview"
}) {
vfxSubView.backgroundColor = UIColor.white.withAlphaComponent(0.7)
}
Run Code Online (Sandbox Code Playgroud)
(兼容 Swift 5)
默认色调约为 70% 不透明度,因此最简单的方法是使用具有 0.7 alpha 分量的目标背景颜色。
我还注意到,如果视觉效果包含自定义子视图,这可能会重置为默认值。如果我将这个相同的片段添加到viewDidLayoutSubviews视图控制器的函数中,那么即使在内置子视图更新后,它也会保持自定义背景颜色。
这是一个带有深色模糊效果样式的示例。顶部显示默认色调,底部版本具有自定义黑色背景色,不透明度为 70%。
如果你只是想要模糊并且你的模糊视图将是静止的,你可以使用该类UIImageEffects并将其更改tintColor为“全”白色:
- (UIImage *)applyExtraLightEffect
{
UIColor *tintColor = [UIColor colorWithWhite:0.97 alpha:0.82];
return [self applyBlurWithRadius:20 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil];
}
Run Code Online (Sandbox Code Playgroud)
据我所知你无法在UIVisualEffectView.
| 归档时间: |
|
| 查看次数: |
5101 次 |
| 最近记录: |