我有一个UIVisualEffectView,它在出现时会引起一些奇怪的假象。加载视图后,将UIVisualEffectView添加到代码中,因为在iOS 7中不可用。
在街景图像上查看模糊的文本背景:http://s.swic.name/Z3UL
模糊需要花费0.1秒的时间才能显示出来,在此之前,只有较低分辨率的背景照耀着,就像尚未计算出模糊一样。
知道发生了什么吗?我正在使用此代码在awakeFromNib中添加模糊
- (void)addBlurWithColor:(UIColor *)color andStyle:(UIBlurEffectStyle)style andVibrancy:(BOOL)vibrancy
{
if (UIDevice.supportsVisualEffects && NSClassFromString(@"UIVisualEffectView") && !UIAccessibilityIsReduceTransparencyEnabled()) {
self.backgroundColor = color;
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:style];
UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = self.bounds;
visualEffectView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
NSArray *subviews = self.subviews;
[self addSubview:visualEffectView];
[self sendSubviewToBack:visualEffectView];
if (vibrancy) {
UIVibrancyEffect *vibrancyEffect = [UIVibrancyEffect effectForBlurEffect:blurEffect];
UIVisualEffectView *vibrancyEffectView = [[UIVisualEffectView alloc] initWithEffect:vibrancyEffect];
[vibrancyEffectView setFrame:self.bounds];
vibrancyEffectView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
for (UIView *subview in subviews) {
[vibrancyEffectView.contentView addSubview:subview];
}
[[visualEffectView contentView] addSubview:vibrancyEffectView];
}
}
}
编辑:视频只是启用了慢速动画,过渡是常规的推送。
Edit2:如果我只是在Interface Builder中拖放“带有模糊的UIVisualEffectView”,我也会得到同样的奇怪行为,所以上面的代码不应该被指责。
最佳答案
发现了问题,当视图出现时,我在[UIView transitionWithView:...]
中重新加载了tableview,这改变了alpha值,当谈到UIVisualEffectViews
时,这显然是一个很大的禁忌!
根据UIVisualEffectView文档;
使用UIVisualEffectView类时,请避免使用
小于1。创建部分透明的视图会导致
系统将视图和所有相关子视图组合在一起
屏幕外渲染通行证。 UIVisualEffectView对象需要组合
作为内容的一部分,它们被层叠在顶部以看起来
正确。在视觉效果视图上将alpha设置为小于1或
它的任何 super 视图都会导致许多效果看起来不正确
出现在所有。
https://developer.apple.com/library/ios/documentation/uikit/reference/UIVisualEffectView/index.html
关于ios - 带有UIVisualEffectView的奇怪模糊伪像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27606107/