使用UIVisualEffect时,模糊视图有时无法更新

时间:2014-10-06 14:10:46

标签: ios ios8 uiblureffect

我在其中一个视图的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方式模糊。该特定区域具有经常变化的图形。

我的问题是,有时当我的图形发生变化并且我调出模糊视图时,模糊图像就会出现不再存在的图形。好像模糊视图没有注意到超级视图已经改变了。

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

3 个答案:

答案 0 :(得分:3)

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

我有两个UIVisualEffectsViews(一个额外的灯和一个暗),在对整个视图的背景图像进行更改后,我调用了这个更新效果视图的小方法。

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

希望在此过程中帮助某人!

答案 1 :(得分:1)

我一直遇到这个问题,我使用UIVisualEffect并且效果更好(在我看来还不是一个完美的解决方案)是将它包含在“viewWillAppear”类型的方法中。这样,视觉效果在其下的视图准备就绪时呈现,而不是在未呈现其下的视图之前添加视觉效果视图

答案 2 :(得分:0)

有两种策略可以解决API的这个问题:

  1. 每次使用新的UIVisualEffectView
  2. 为UIVisualEffectView的alpha属性设置动画
  3. 第一个策略是代码多于第二个策略,但每个策略在重置UIVisualEffectView的模糊视图时同样有效。 (1)和(2)工作的原因是(1)迫使它在它下面重新取样,我推测,(2)也是如此。但为什么(2)这样做?

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

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