iPhone SDK - 磨砂玻璃(iOS 7模糊)效果
我试图在UIImageView中应用磨砂玻璃效果。iPhone SDK - 磨砂玻璃(iOS 7模糊)效果
我试图执行我发现的in this question,但结果不可接受。 我想是这样的:
任何想法?
UPDATE:
此外,我们可以看到的iOS 7使用这种效果在很多地方。我们如何重现它?
约CoreImage一个很好的教程在这里,展示如何应用滤镜和更多:
http://www.raywenderlich.com/5689/beginning-core-image-in-ios-5
更新1
那么的一点点研究之后,我最终发现,与OS X版本的库相比,iOS的核心映像仍然不完整。所以我搜索了很多,我找到了两个解决方案,其中一个更简单,另一个更广泛和更复杂的库。
惊人的,这值得编辑,库由Brad Larson处理图像和视频使用OpenGL,GPUImage。它比Core Image快速高效。简介:http://www.sunsetlakesoftware.com/2012/02/12/introducing-gpuimage-framework。 GitHub的:GPUImage
因此,例如,在几行,我可以得到我想要的结果(其中originalImage是UIImage的应用效果):
GPUImageGaussianBlurFilter *blurFilter = [[GPUImageGaussianBlurFilter alloc] init];
blurFilter.blurSize = 2;
UIImage *blurImage = [blurFilter imageByFilteringImage:resizedImage];
更新2
在苹果宣布iOS 7之后,一些开发人员发现了一种解决方法,与Apple在默认的iOS应用程序中所做的相同,因为Apple没有为此提供API。 The simplest and better solution, in my opinion, is this one。为什么我认为这是最好的?因为即使背后的某些视图发生移动,模糊效果仍然很好,因为我们预计它会起作用。但是,请记住,它依赖于iOS 7 SDK才能工作,如果Apple更改UIToolbar,则可能会有风险。
更新3
苹果提到,在WWDC 2013(会话226 - iOS上实现引人入胜的用户界面),他们将提供UIImage的一个类别类,称为的UIImage + ImageEffects(我GOOGLE了它,and found here,但它在Developer Portal - search for UIImageEffects in the search box中可用)。使用此类别,可以使用多种方法(光线,黑暗,具有特定颜色等)在静态UIImage中应用模糊。另外,昨天I saw this component,发现它很有趣,因为你可以在一个框架中应用效果(基于上述类别)。
UPDATE 4
最后,在iOS 8日,苹果发布了新的类,可以很容易地做直播模糊。使用UIVisualEffect
和UIVisualEffectView
,您可以快速将实时模糊添加到您的应用程序。 Here is a good tutorial from Ryan Nystrom on how to use those classes (and in blur in general):
您可能还需要将高斯模糊与白色混合,才能得到您上面要看的外观,并且我将在某个时刻为此进行专门的过滤。另外,我正要试验纹理磨砂玻璃,就像这款着色器提供的一样:http://coding-experiments.blogspot.com/2010/06/frosted-glass.html – 2012-07-23 16:15:51
我该怎么做?我觉得我没有阅读文档的地方=(也无法编译文档 – 2012-07-24 07:43:16
对于自定义过滤器,最好的参考是看看其他过滤器是如何工作的,例如,上面连接的纹理玻璃会可以通过使用自定义片段着色器来完成,因此您需要创建一个新的自定义过滤器(使用类似于模板的方式)并修改它们在OpenGL ES中提供的片段着色器。对于明亮的模糊,您可能能够链接亮度滤镜的高斯模糊,或者最差的情况下,为亮化步骤创建一个具有自定义片段着色器的滤镜组。核心文档位于Readme.md文件中。 – 2012-07-24 14:01:31
看一看the Core Image Programming Guide。看起来好像stylize filter和blur filter可能适合您的需求。我以前从未与Core Image合作过,但我认为可能会有一些涉及他们的良好WWDC会话。该文档有a basic piece of sample code here。
它看起来像iOS没有所有的OS X的过滤器。你可以通过代码NSArray * properties = [CIFilter filterNamesInCategory:kCICategoryBuiltIn]; NSLog(@“%@”,属性);' – 2012-07-22 16:01:21
没有深入细节,你有没有在iOS 6上运行该代码? – Moshe 2012-07-22 19:25:36
还没有。检查我自己的答案 - 解决! – 2012-07-22 21:06:00
解决方案适用于iOS 7和8,而无需使用CoreImage或CoreGraphics中的所有:
- (void)addBlurToView:(UIView *)view {
UIView *blurView = nil;
if([UIBlurEffect class]) { // iOS 8
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleExtraLight];
blurView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
blurView.frame = view.frame;
} else { // workaround for iOS 7
blurView = [[UIToolbar alloc] initWithFrame:view.bounds];
}
[blurView setTranslatesAutoresizingMaskIntoConstraints:NO];
[view addSubview:blurView];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[blurView]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(blurView)]];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[blurView]|" options:0 metrics:0 views:NSDictionaryOfVariableBindings(blurView)]];
}
(假设你不针对iOS版比7旧版本;如果你是,你必须测试else
区块中的iOS版本)
此解决方案适用于任何视图,而不仅适用于图像。
使用UIImageEffects
如果你申请的时候模糊想要更多的控制,你可以利用苹果的UIImageEffects
(通过他们的示例代码可用)的。
您可以从苹果的开发库复制代码为UIImageEffects
:Blurring and Tinting an Image
这里是如何使用它:
#import "UIImageEffects.h"
...
self.yourImageView.image = [UIImageEffects imageByApplyingLightEffectToImage:[UIImage imageNamed:@"yourImage.png"]];
这里的解决方案与UIToolbar: http://*.com/a/19506076/774394 – 2013-10-21 22:51:56
我在编辑2中提到过类似的东西 - 它使用UIToolbar也是 – 2013-10-22 08:40:20
是的你是对的。但是这个解决方案在UIView动画的动画框/边界上起作用。 – 2013-10-22 15:47:28