磨砂玻璃(iOS 7模糊)效果

Nat*_* R. 33 cocoa-touch uikit ios ios7

我试图在UIImageView中应用磨砂玻璃效果.

我试图实现我在这个问题中找到的东西,但结果是不可接受的.我想要这样的东西:

磨砂玻璃效果

另外,我们可以看到iOS 7在很多地方都使用了这种效果.我们怎样才能重现它?

Nat*_* R. 51

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

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

更新1

因此,经过一些研究后,我发现iOS的核心映像与OS X版本的库相比仍然不完整.所以我搜索了很多,我找到了两个解决方案,其中一个更简单,另一个更宽更复杂的库.

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

GPUImageGaussianBlurFilter *blurFilter = [[GPUImageGaussianBlurFilter alloc] init];
blurFilter.blurSize = 2;
UIImage *blurImage = [blurFilter imageByFilteringImage:resizedImage];
Run Code Online (Sandbox Code Playgroud)

更新2

在Apple发布iOS 7之后,一些开发人员发现了一种解决方法,就像Apple在默认iOS应用程序中所做的那样,因为Apple没有为此提供API.在我看来,最简单和更好的解决方案就是这个.为什么我认为这是最好的?因为即使它后面的一些视图移动,模糊仍然可以与更新的效果一起使用,因为我们期望它应该工作.但是,请记住,它取决于iOS 7 SDK才能工作,如果Apple更改UIToolbar,则存在风险.

更新3

Apple提到,在WWDC 2013(Session 226 - 在iOS上实现Engaging UI),他们将在UIImage上提供一个类别类,称为UIImage + ImageEffects(我在谷歌搜索,在这里找到,但它可以在Developer Portal中找到 - 在中搜索UIImageEffects搜索框).使用此类别,您可以使用多种方法(浅色,深色,特定颜色等)在静态UIImage中应用模糊.此外,昨天我看到了这个组件并发现它非常有趣,因为你可以在一个框架中应用效果(基于上面提到的类别).

更新4

最后,在iOS 8上,Apple发布了可以轻松实现实时模糊的新类.使用UIVisualEffectUIVisualEffectView,您可以快速为您的应用添加实时模糊.以下是Ryan Nystrom关于如何使用这些类(以及一般模糊)的一个很好的教程:

  • 您可能还需要将高斯模糊与白色混合以获得您正好在上面看到的外观,并且我将在某个时刻为此做一个专用过滤器.此外,我将尝试使用纹理磨砂玻璃,就像这个着色器提供:http://coding-experiments.blogspot.com/2010/06/frosted-glass.html (4认同)

KPM*_*KPM 21

适用于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)]];
}
Run Code Online (Sandbox Code Playgroud)

(假设您的目标版本不是iOS 7以前的版本;如果是,则必须在else块中测试iOS版本)

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

  • 很好的例子.效果很好. (2认同)