44

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

更新:以下の私の更新された回答を確認してください。iOS7とiOS8の登場との関連性がさらに高まります。

4

5 に答える 5

47

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

//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に感謝します)。この質問で受け入れられた答えは、このライブラリと同様に、代替として有望に見えます。

于 2012-06-21T03:11:25.480 に答える
28

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

当時、私はフォトショップで写真を個人的にぼかしましたが、動的および静的なぼかしを行う優れたサードパーティ製ライブラリが多数あります。ここにいくつかあります。

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

iOS 8:iOS 8の次のリリースで、Appleには組み込みのぼかしが含まれていUIViewますUIVisualEffectViewhttps://developer.apple.com/documentation/uikit/uivisualeffectview

于 2014-01-24T03:00:41.603 に答える
11

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

于 2014-06-22T16:10:34.457 に答える
1

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

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];
于 2015-08-11T18:21:03.903 に答える
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;
于 2015-03-20T10:52:20.960 に答える