web-dev-qa-db-ja.com

UIViewにぼかしを適用する方法は?

現在、UIView全体をぼかす必要があるiPhoneアプリを作成しています。どうすればこれを達成できますか? このフレームワーク を見てきましたが、UIViewで機能するとは思わない。 UIViewをぼかす別の方法はありますか?

[〜#〜] update [〜#〜]:以下の更新された回答を確認し、iOS 7およびiOS 8の出現との関連性を追加します。

44
virindh

IOS 7のリリース以来、この質問には多くのヒットがあり、私がやったことをフォローアップする必要があると思いました。

私は当時、Photoshopで個人的に写真をぼかしましたが、dynamicstaticぼかし、ここにカップルがあります:

個々のフレームまたは画面のスクリーンショットを撮る必要がなくなったため、これを投稿したかったのです。

iOS 8:iOS 8の今後のリリースでは、Appleには組み込みのぼやけたUIViewが含まれています、UIVisualEffectViewhttps://developer.Apple.com/documentation/uikit/uivisualeffectview

28
virindh

これは動作するはずです。何が起こっているのかを理解できるように、コードでコメントしました。

//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 と同様に、代替として有望に見えます。

47
pasawaya

IOS 8では、UIVisualEffectViewを使用してビューをぼかすことができます。参照: https://developer.Apple.com/documentation/uikit/uivisualeffectview

11
Robert

このコードを使用して単純に解決しました。

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];
1
Yano Ratheez

ビューをぼかす最も簡単な方法は、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;
0
YaBoiSandeep