我有一个 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”,我会得到同样奇怪的行为,所以上面的代码不应该受到责备。