Apple提供了这种实时模糊视图类UIVisualEffectView
,您可以将其与UIBlurEffect
一起使用,UIBlurEffect
采用三种可用UIBlurEffectStyle
之一:
enum UIBlurEffectStyle : Int {
case ExtraLight
case Light
case Dark
}
现在,出于演示目的,我设置了两个样式为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)
到目前为止一切顺利,一切按预期工作,他们模糊图像:
还有一些关于颜色的工作
第一节第一节第一节第二节第一节
但是当涉及到白色背景时,会发生这种情况:
左侧的Light
效果按预期工作,但右侧的ExtraLight
效果会留下某种灰色方块。
现在的问题是:有没有什么技巧或方法可以让我在白色背景上使用额外的灯光模糊效果(支持实时模糊),并消除丑陋的灰色阴影?
9条答案
按热度按时间q5lcpyga1#
据我所知,附加色调是
UIVisualEffectView
类的一个内置特性,如果用Xcode检查视图层次结构,可以看到在视觉效果视图示例中有两个默认的子视图:UIVisualEffectBackdropView
和UIVisualEffectSubview
。(我假设它们是私有类。)如果检查UIVisualEffectSubview
,您可以看到它有一个背景色,这导致了您注意到的不需要的色调。我不确定是否有官方支持的方法来移除它,但是你可以通过过滤私有子视图的名称来修改这个背景颜色:
(Swift 5兼容)
默认色调大约为70%不透明度,因此最简单的方法是使用具有0.7 Alpha分量的目标背景色。
我还注意到,如果视觉效果包含自定义子视图,这可能会重置为默认值。如果我将相同的代码段添加到视图控制器的
viewDidLayoutSubviews
函数中,那么即使在更新内置子视图后,它也会保持自定义背景色。下面是一个暗模糊效果样式的例子。顶部显示默认的色调,底部显示自定义的黑色背景色,不透明度为70%。
vsaztqbk2#
如果你只想要模糊效果,而你的模糊视图是固定的,你可以使用
UIImageEffects
类,并将tintColor
更改为“全”白色:据我所知,你不能改变它在
UIVisualEffectView
。z2acfund3#
您可以尝试:
qojgxg4l4#
简单的解决方案
受Shannon Hughes' Blog Post的启发,我可以找到一个简单的解决方案。只需在效果视图中添加一个透明的白色背景色。我不知道它是否与
extraLight
完全一样,但对我来说,它已经足够接近了。w8biq8rn5#
下面的代码应该可以为它提供所需的色调:
我不建议为"_UIVisualEffectSubview"添加一个检查,因为这个类可能会在后续的iOS更新中更改。此外,应用程序可能会因此而被拒绝。
bybem2ql6#
iOS 15拥有
但它仍然遭受讨厌的灰色色调。希望有一个选项,模糊背景视图没有任何色调。
我尝试了一个简单的颜色修正技巧,它可以修正我的背景颜色,但只在亮模式下有效!对于暗模式,我只把背景做成纯黑色(没有半透明的模糊)
我的“materialTintColorCorrect”颜色资源是#F0F8FF 27%的不透明度用于浅色模式,#000000 100%的不透明度用于深色模式。
zxlwwiss7#
wlsrxk518#
我建议将
extraLightView
添加到UIColor(white: 1.0, alpha: 0.x)
视图中,其中x
可以根据滚动视图的contentOffset
进行修改。当视图后面没有任何内容时,x
为1时,extraLightView
将为白色。当您滚动并修改x
时,不会修改UIVisualEffectView
(这是非常不鼓励的),而是它的父视图,这是完全安全的。cgh8pdjw9#
与Swift 5配合使用
当背景视图为白色时,我使视觉效果视图完全为白色的方法。