如何将模糊应用于UIView?

时间:2012-06-21 02:52:06

标签: ios image-processing uiview blur

现在我正在构建一个需要模糊整个UIView的iPhone应用程序。我怎样才能做到这一点?我见过this framework,但我不认为这适用于UIView。是否有另一种模糊UIView的方法?

更新:检查下面我更新的答案,添加更多与iOS 7和iOS 8相关的相关性。

5 个答案:

答案 0 :(得分: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];

如果您对代码有任何疑问,请将其留在评论中。

注意:从5.1开始,iOS上不存在CIGaussianBlur,因此您必须找到一种不同的方式来模糊设备5.x +的视图(感谢@BradLarson提供此技巧)。 this question中接受的答案看起来很有希望作为替代,this library也是如此。

答案 1 :(得分:28)

自从iOS 7发布以来,这个问题已经得到了很多关注,我认为我应该跟进我最终做的事情。

我个人使用photoshop模仿了这张照片,但是有很多很棒的第三方库提供 动态 静态 模糊,这里有几个:

我想发布此消息,因为您不再需要来截取各个帧或屏幕的截图。

iOS 8:随着即将发布的iOS 8版本,Apple内置模糊UIViewUIVisualEffectViewhttps://developer.apple.com/documentation/uikit/uivisualeffectview

答案 2 :(得分:11)

在iOS 8中,您可以使用UIVisualEffectView来获取模糊的视图。 请参阅:https://developer.apple.com/documentation/uikit/uivisualeffectview

答案 3 :(得分: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];

答案 4 :(得分:0)

模糊视图的最简单方法是添加UIToolbar,只需更改Alpha值即可更改模糊。

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;