更改对UIVisualEffectView的影响

Urk*_*man 7 objective-c ios

有没有办法改变对UIVisualEffectView的影响?在我的应用程序中,我在Storyboards中创建了一个UIVisualEffectView,然后我想在usersettings上将其更改为Light或Dark ...

我只看到"initWithEffect"和"效果"属性是readonly :(

那么,关于如何解决这个问题的任何想法?

谢谢,Urkman

Hep*_*eps 11

实际上现在有可能做到这一点!

myVisualEffectView.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
Run Code Online (Sandbox Code Playgroud)

你可以动画这个!

[UIView animateWithDuration:1.0 animations:^{
    myVisualEffectView.effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight];
}];
Run Code Online (Sandbox Code Playgroud)

你甚至可以添加和删除模糊动画 - 几乎就像在Springboard上的Spotlight reaveal一样!只需将样式设置为nil即可逐步删除模糊效果.

Swift 4版本:

myVisualEffectView.effect = UIBlurEffect(style: .dark) 

UIView.animate(withDuration: 1, animations: {
    myVisualEffectView.effect = UIBlurEffect(style: .extraLight)
})
Run Code Online (Sandbox Code Playgroud)


小智 1

不幸的是,视图一旦创建就无法更改效果。

因此,如果您使用 UIVisualEffectsView 作为视图层次结构的容器,则需要将效果视图替换为使用另一种效果创建的新视图,并将层次结构移动到新容器。

例如,如果您使用 UIVisualEffectsView 只是为了模糊其背后的所有视图,则可以在故事板中创建两个模糊视图,将其中之一设置为隐藏,并根据用户设置更改其隐藏状态。