2

現在 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 のサブビューとして追加するのではなく、ビュー自体としてテストしました。そこにも同じ問題があります。

4

1 に答える 1

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]);
}
于 2015-09-12T04:43:02.730 に答える