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]);
}
Другие вопросы по тегам