1

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

4

1 回答 1

2

发现了问题,当视图出现时,我正在重新加载其中改变 alpha 的 tableview [UIView transitionWithView:...],这显然是一个很大的禁忌UIVisualEffectViews

根据 UIVisualEffectView 文档;

使用 UIVisualEffectView 类时,避免小于 1 的 alpha 值。创建部分透明的视图会导致系统在屏幕外渲染过程中合并视图和所有关联的子视图。UIVisualEffectView 对象需要作为内容的一部分进行组合,以使其看起来正确。在视觉效果视图或其任何超级视图上将 alpha 设置为小于 1 会导致许多效果看起来不正确或根本不显示。

https://developer.apple.com/library/ios/documentation/uikit/reference/UIVisualEffectView/index.html

于 2014-12-22T16:29:40.677 回答