现在我正在构建一个需要模糊整个 UIView 的 iPhone 应用程序。我怎样才能做到这一点?我见过这个框架,但我认为它不适用于 UIView。是否有另一种模糊 UIView 的方法?
更新:在下面查看我的更新答案,随着 iOS 7 和 iOS 8 的出现增加更多相关性。
现在我正在构建一个需要模糊整个 UIView 的 iPhone 应用程序。我怎样才能做到这一点?我见过这个框架,但我认为它不适用于 UIView。是否有另一种模糊 UIView 的方法?
更新:在下面查看我的更新答案,随着 iOS 7 和 iOS 8 的出现增加更多相关性。
这应该有效。我在代码中注释以帮助您了解发生了什么:
//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 提供此提示)。这个问题中接受的答案看起来很有希望作为替代品,这个库也是如此。
自从 iOS 7 发布以来,这个问题已经得到了很多点击,我想我应该跟进我最终做了什么。
我个人当时用 Photoshop 对图片进行了模糊处理,但是有很多很棒的第三方库可以进行动态和静态模糊处理,这里有几个:
UITabBar
并应用于任何视图以获取 iOS 7 的原生模糊:
https ://github.com/JagCesar/iOS-blur/我想发布此内容,因为您不再需要对单个帧或屏幕进行屏幕截图。
iOS 8:随着即将发布的 iOS 8,Apple 包含了一个内置的blurred UIView
( https://developer.apple.com/documentation/uikit/uivisualeffectview )UIVisualEffectView
在 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,只需更改 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;