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