繁体   English   中英

UIVisualEffectView产生奇怪的模糊伪像

[英]Strange blur artefacts with UIVisualEffectView

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

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

根据UIVisualEffectView文档;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM