現在、UIView全体をぼかす必要があるiPhoneアプリを作成しています。どうすればこれを達成できますか? このフレームワーク を見てきましたが、UIViewで機能するとは思わない。 UIViewをぼかす別の方法はありますか?
[〜#〜] update [〜#〜]:以下の更新された回答を確認し、iOS 7およびiOS 8の出現との関連性を追加します。
IOS 7のリリース以来、この質問には多くのヒットがあり、私がやったことをフォローアップする必要があると思いました。
私は当時、Photoshopで個人的に写真をぼかしましたが、dynamicとstaticぼかし、ここにカップルがあります:
UITabBar
からレイヤーを取り、すべてのビューに適用してiOS 7のネイティブブラーを取得します。 https://github.com/JagCesar/iOS-blur/個々のフレームまたは画面のスクリーンショットを撮る必要がなくなったため、これを投稿したかったのです。
iOS 8:iOS 8の今後のリリースでは、Appleには組み込みのぼやけたUIView
が含まれています、UIVisualEffectView
( https://developer.Apple.com/documentation/uikit/uivisualeffectview )
これは動作するはずです。何が起こっているのかを理解できるように、コードでコメントしました。
//To take advantage of CIFilters, you have to import the Core Image framework
#import <CoreImage/CoreImage.h>
//Get a UIImage from the UIView
UIGraphicsBeginImageContext(myView.bounds.size);
[myView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//Blur the UIImage with a CIFilter
CIImage *imageToBlur = [CIImage imageWithCGImage:viewImage.CGImage];
CIFilter *gaussianBlurFilter = [CIFilter filterWithName: @"CIGaussianBlur"];
[gaussianBlurFilter setValue:imageToBlur forKey: @"inputImage"];
[gaussianBlurFilter setValue:[NSNumber numberWithFloat: 10] forKey: @"inputRadius"];
CIImage *resultImage = [gaussianBlurFilter valueForKey: @"outputImage"];
UIImage *endImage = [[UIImage alloc] initWithCIImage:resultImage];
//Place the UIImage in a UIImageView
UIImageView *newView = [[UIImageView alloc] initWithFrame:self.view.bounds];
newView.image = endImage;
[self.view addSubview:newView];
コードについて質問がある場合は、コメントに残してください。
注:CIGaussianBlurは5.1のiOSには存在しないため、デバイス5.x +の表示をぼかす別の方法を見つける必要があります(ありがとうこのヒントの@BradLarson)。 this question で受け入れられた答えは、 this library と同様に、代替として有望に見えます。
IOS 8では、UIVisualEffectView
を使用してビューをぼかすことができます。参照: https://developer.Apple.com/documentation/uikit/uivisualeffectview
このコードを使用して単純に解決しました。
UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:yourView.bounds];
toolBar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 7.0) {
toolBar.barTintColor = nil;
toolBar.translucent = YES;
toolBar.barStyle = UIBarStyleBlack;
}
else
[toolBar setTintColor:[UIColor colorWithRed:5 green:31 blue:75 alpha:1]];
[yourView insertSubview:toolBar atIndex:0];
ビューをぼかす最も簡単な方法は、UIToolbarを追加し、アルファ値を変更するだけでぼかしを変更することです。
self.toolbar = [[UIToolbar alloc]initForAutoLayout];
[self.view addSubview:self.toolbar];
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:0];
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:0];
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:NAVBAR_HEIGHT];
[self.toolbar autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:0];
self.toolbar.alpha = 0.5;