目前在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的子视图。同样的问题也在那里。
答案 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]);
}