【问题标题】:Frosted Glass (iOS 7 Blur) Effect磨砂玻璃(iOS 7 模糊)效果
【发布时间】:2012-07-21 00:25:54
【问题描述】:

我正在尝试在 UIImageView 中应用毛玻璃效果

我尝试实现我发现的in this question,但结果不可接受。 我想要这样的东西:

另外,我们可以看到 iOS 7 在很多地方都使用了这种效果。我们如何重现它?

【问题讨论】:

标签: ios cocoa-touch ios7 uikit


【解决方案1】:

这里有一个关于 CoreImage 的好教程,展示了如何应用过滤器等等:

http://www.raywenderlich.com/5689/beginning-core-image-in-ios-5

更新 1

所以经过一些研究,我最终发现,与 OS X 版本的库相比,iOS 的 Core Image 仍然不完整。所以我搜索了很多,我找到了两种解决方案,一种更简单,另一种更广泛和复杂的库。

因此,例如,我可以在几行中得到我想要的结果(其中 originalImage 是应用效果的 UIImage):

GPUImageGaussianBlurFilter *blurFilter = [[GPUImageGaussianBlurFilter alloc] init];
blurFilter.blurSize = 2;
UIImage *blurImage = [blurFilter imageByFilteringImage:resizedImage];

更新 2

在 Apple 发布 iOS 7 后,一些开发人员找到了一种解决方法,可以与 Apple 在默认 iOS 应用中所做的相同,因为 Apple 没有为此提供 API。 The simplest and better solution, in my opinion, is this one。为什么我认为它是最好的?因为即使它后面的某些视图移动了,模糊仍然可以很好地配合更新后的效果,正如我们预期的那样。但是,请记住,它依赖于 iOS 7 SDK 才能工作,而且它如果 Apple 更改 UIToolbar 可能会有风险。

更新 3

Apple 提到,在 WWDC 2013(第 226 场会议 - 在 iOS 上实现引人入胜的 UI)他们将在 UIImage 上提供一个名为 UIImage+ImageEffects 的类别类(我用谷歌搜索了它,and found here,但它是在Developer Portal - search for UIImageEffects in the search box 中可用)。使用此类别,您可以使用多种方法(浅色、深色、具有特定颜色等)在静态 UIImage 中应用模糊。另外,昨天I saw this component 发现它很有趣,因为您可以在框架中应用效果(基于上述类别)。

更新 4

最后,在 iOS 8 上,Apple 发布了可以轻松进行实时模糊的新类。使用UIVisualEffectUIVisualEffectView,您可以快速为您的应用程序添加实时模糊。 Here is a good tutorial from Ryan Nystrom on how to use those classes (and in blur in general):

【讨论】:

  • 您可能还必须将高斯模糊与白色混合以获得您想要的外观,并且我打算在某个时候为此做一个专用过滤器。另外,我打算用带纹理的磨砂玻璃做实验,就像这个着色器提供的那样:coding-experiments.blogspot.com/2010/06/frosted-glass.html
  • 我该怎么做呢?我觉得我没有在哪里阅读文档=(也无法编译文档。
  • 对于自定义过滤器,最好的参考是看看其他过滤器是如何工作的。例如,上面链接的纹理玻璃将通过使用自定义片段着色器来完成,因此您需要创建一个新的自定义过滤器(使用类似于模板的东西)并修改它们提供的片段着色器以在 OpenGL ES 中工作.对于变亮的模糊,您可以将亮度滤镜与高斯模糊链接起来,或者在最坏的情况下为变亮步骤创建一个带有自定义片段着色器的滤镜组。核心文档位于 Readme.md 文件中。
  • 好的,很好。还不是完美的结果,但已经达到了 90%。感谢您的回复,已向您发送了一封邮件,以便在 sunsetlakesoftware 与您联系。
  • 使用工具栏的图层来实现模糊效果是非常冒险的,如果 Apple 在未来的某个版本中更改 UIToolbar 的视图堆栈,这是完全有可能的,你会被一些非常破碎的东西卡住并且会有赶紧发布。
【解决方案2】:

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 版本)

此解决方案适用于任何视图,而不仅仅是图像。

【讨论】:

  • 非常有用的答案,可以轻松实现 ios 7 和 8,只是一个问题,假设我不断添加和删除这个模糊的视图,我是否应该删除每次添加的约束“从超级视图中删除视图”(我使用此代码再次添加它,所以我知道不断添加约束)
  • 为什么不简单地隐藏而不是删除它?
  • 很好的例子。效果很好。
  • 伟大的一年。真的很感谢你。完美运行。但我想改变模糊视图的颜色。它显示白色模糊。
  • 这很好用,除了 UIBlurEffect 不适用于较旧的 iPad,如 iPad2。花了几个小时试图弄清楚为什么它只是放了一个半透明的面具而不是模糊 - 这是由于旧设备造成的!
【解决方案3】:

使用 UIImageEffects

如果您想在应用模糊时获得更多控制,可以使用 Apple 的 UIImageEffects(可通过他们的示例代码获得)。

您可以从 Apple 的开发人员库中复制 UIImageEffects 的代码:Blurring and Tinting an Image

这里是如何使用它:

#import "UIImageEffects.h"
...

self.yourImageView.image = [UIImageEffects imageByApplyingLightEffectToImage:[UIImage imageNamed:@"yourImage.png"]];

【讨论】:

    【解决方案4】:

    看看the Core Image Programming Guide。似乎stylize filterblur filter 可能适合您的需求。我以前从未使用过 Core Image,但我认为可能会有一些很好的 WWDC 会议涉及它们。文档有a basic piece of sample code here

    【讨论】:

    • 看起来iOS没有OS X的所有过滤器。您可以通过代码NSArray *properties = [CIFilter filterNamesInCategory:kCICategoryBuiltIn]; NSLog(@"%@", properties);查看
    • 不谈细节,你是否在 iOS 6 上运行过该代码?
    猜你喜欢
    • 2019-04-16
    • 2021-11-12
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2013-06-10
    相关资源
    最近更新 更多