我的一个视图的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有两种策略可以克服这个问题:
- 每次使用新的UIVisualEffectView
- 为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 ...
*/