使用 UIVisualEffect,模糊视图有时不会更新



我的一个视图的layoutSubviews方法中有以下代码:

UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = CGRectMake(0, 0, self.blurView.frame.size.width, self.blurView.frame.size.height);
[self.blurView addSubview:visualEffectView];

self.blurView对应于我视野中给定区域尖端的IBOutlet,我希望以酷炫的iOS 8方式对其进行模糊处理。这个特殊的地区有一个经常变化的图形。

我的问题是,有时当我的图形发生变化,我打开模糊视图时,模糊的图像就是一个不再存在的图形。就好像模糊视图没有注意到超视图发生了变化。

是否有任何策略可以确保模糊的视图是当前呈现的图形?

另一个强制UIVisualEffectsView的方法是将背景颜色临时更改为不同的颜色,然后返回原始颜色。这也会强制重新计算,并且不会产生错误(就像您试图更改alpha值时所得到的那样)。

我有两个UIVisualEffectsView(一个额外的亮视图和一个暗视图),在对整个视图的背景图像进行更改后,我称之为更新效果视图的小方法。

-(void)refreshBlurViews {
    self.lightVisualEffect.backgroundColor = [UIColor blackColor];
    self.lightVisualEffect.backgroundColor = [UIColor clearColor];
    self.darkVisualEffect.backgroundColor = [UIColor blackColor];
    self.darkVisualEffect.backgroundColor = [UIColor clearColor];
}

希望这能帮助到一个人!

我在使用UIVisualEffect时一直遇到这种情况,而效果更好的(在我看来,这不是一个完美的解决方案)是将其包含在"viewWillAppear"类型的方法中。通过这种方式,视觉效果是在其下的视图准备就绪时渲染的,而不是在其下视图未渲染

之前添加视觉效果视图

API有两种策略可以克服这个问题:

  1. 每次使用新的UIVisualEffectView
  2. 为UIVisualEffectView的alpha属性制作动画

第一种策略比第二种策略包含更多的代码,但每种策略在重新设置UIVisualEffectView模糊视图时都同样有效。(1)和(2)起作用的原因是,我认为(1)迫使它在它下面重新采样,(2)也起作用。但为什么(2)要这样做?

下面(2)重采样的原因是,如果你正在为UIVisualEffectView的alpha属性设置动画,苹果的API不会模糊它的背景。在下面的评论中告诉我们:

 /*
 Proper use of this class requires some assistance on your part. Namely:
 • Avoid alpha values < 1 ...
 */

最新更新