UIVisualEffectView setHidden=YES очень медленно - странная ошибка?
Тестирование в 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 ответ
Я смог решить это сам. Сначала я вызывал метод hideBlur из другой очереди dispatch_async, отличной от главной очереди. Я решил это, поместив часть обновления пользовательского интерфейса в основную очередь следующим образом:
-(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]);
}