私は画像ビューでセルフビューを持っています:
UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.bounds];
[self setBluredImageView:imageView];
[self addSubview:imageView];
- (UIImage *)takeSnapshotOfView:(UIView *)view
{
CGFloat reductionFactor = 1;
UIGraphicsBeginImageContext(CGSizeMake(view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor));
[view drawViewHierarchyInRect:CGRectMake(0, 0, view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor) afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
他のビューよりも自分のビューを表示したい場合の方法では、次のようにします。
- (void)showMe; {
AppDelegate* app = [AppDelegate shared];
[app.window addSubview:self];
UIImage *image = [self blurWithImageEffects:[self takeSnapshotOfView:app.window]];
[[self bluredImageView] setImage:image];
[UIView animateWithDuration:0.4 animations:^{
[self setAlpha:1.0];
}];
}
ご覧のとおり、メイン ウィンドウ ビューに基づく「グラフィック コンテキスト」をぼかす必要があります。セルフビューを提示すると、最初は完璧に機能しますが、ぼやけたイメージのようなものが互いに乗算されます。
これは、最初にビューを表示したときの画像です。
ビューを数回表示すると、ぼやけた画像は次のようになります。
ご覧のとおり、ぼやけたスクリーンショットは毎回異なりますが、スクリーンショットを取得するために同じ方法を使用し、View Controller やその他の UI パーツのコンテンツを更新しません。
ここにあるいくつかの方法と画像カテゴリ。