UIVisualEffectView setHidden = YES非常慢 - 怪异的bug?

时间:2015-09-09 05:02:20

标签: ios objective-c debugging uiview uivisualeffectview

目前在iOS 8.0中进行测试。

我正面临一个奇怪的错误(可能)与UIVisualEffectView。

我将视图添加到整个视图控制器视图的顶部:

-(void)showBlur{
    if (!self.blurview) {
        self.blurview = [[UIView alloc] initWithFrame:self.view.frame];
        UIVisualEffect *blurEffect2;
        blurEffect2 = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
        UIVisualEffectView * visualEffectView2 = [[UIVisualEffectView alloc] initWithEffect:blurEffect2];
        visualEffectView2.frame = self.view.frame;
        [self.blurview addSubview:visualEffectView2];
        [self.view addSubview:self.blurview];
    } else {
        self.blurview.hidden=NO;
    }
}

上面都很好,我看到整个视图顶部的模糊视图。但是,当我需要隐藏整个模糊视图时:

-(void)hideBlur{
    NSLog(@"This gets printed before hidden: %@",[NSDate date]);
    self.blurview.hidden=YES;
    NSLog(@"This gets printed after hidden: %@",[NSDate date]);
}

如何执行所有3行代码但我的模糊视图仍然可见。如果我等待大约5-10秒,那么模糊视图就会消失。另请注意,即使模糊视图是“可见的”(虽然现在应该隐藏),但我仍然可以与模糊视图下的视图进行交互。当我与他们互动时,我看到他们模糊的轮廓移动和东西。但模糊视图需要5-10秒才能消失。

我测试了NSLog语句和断点,看到“.hidden”确实及时成功调用,但视图保持可见5-10秒。

以上打印出来:

2015-09-09 00:55:21.542 Kitty[8600:1094199] This gets printed before hidden: 2015-09-09 04:55:21 +0000
2015-09-09 00:55:21.543 Kitty[8600:1094199] This gets printed after hidden: 2015-09-09 04:55:21 +0000

这是某种错误吗?

编辑2:我最初测试的是视觉效果视图是视图本身而不是将其添加为另一个UIView的子视图。同样的问题也在那里。

1 个答案:

答案 0 :(得分:2)

我能够自己解决这个问题。我最初从主队列以外的另一个dispatch_async队列调用hideBlur方法。我通过将UI更新部分放在主队列上来解决它,如下所示:

-(void)hideBlur{
    NSLog(@"This gets printed before hidden: %@",[NSDate date]);
    dispatch_async(dispatch_get_main_queue(),^{
        self.blurview.hidden=YES;
    });
    NSLog(@"This gets printed after hidden: %@",[NSDate date]);
}