UIVisualEffectView setHidden=YES 非常慢 - 奇怪的错误?
UIVisualEffectView setHidden=YES extremely slow - weird bug?
目前正在 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 秒,模糊视图就会消失。另请注意,即使模糊视图是 "visible"(虽然它现在应该被隐藏),但我仍然能够以某种方式与模糊视图下的视图进行交互。当我与他们互动时,我看到他们模糊的轮廓在移动和填充。但是模糊视图需要 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 的子视图。那里也有同样的问题。
我自己解决了这个问题。我最初是从主队列以外的另一个 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]);
}
目前正在 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 秒,模糊视图就会消失。另请注意,即使模糊视图是 "visible"(虽然它现在应该被隐藏),但我仍然能够以某种方式与模糊视图下的视图进行交互。当我与他们互动时,我看到他们模糊的轮廓在移动和填充。但是模糊视图需要 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 的子视图。那里也有同样的问题。
我自己解决了这个问题。我最初是从主队列以外的另一个 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]);
}