我在其中一个视图的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方式模糊。该特定区域具有经常变化的图形。
我的问题是,有时当我的图形发生变化并且我调出模糊视图时,模糊图像就会出现不再存在的图形。好像模糊视图没有注意到超级视图已经改变了。
是否有任何策略可以确保模糊视图是当前呈现的图形?
答案 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的这个问题:
第一个策略是代码多于第二个策略,但每个策略在重置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 ...
*/