我正在尝试在 UIImageView 中应用磨砂玻璃效果。
我试图实现我在这个问题中发现的内容,但结果是不可接受的。我想要这样的东西:
此外,我们可以看到 iOS 7 在很多地方都使用了这种效果。我们如何重现它?
我正在尝试在 UIImageView 中应用磨砂玻璃效果。
我试图实现我在这个问题中发现的内容,但结果是不可接受的。我想要这样的东西:
此外,我们可以看到 iOS 7 在很多地方都使用了这种效果。我们如何重现它?
关于 CoreImage 的一个很好的教程在这里,展示了如何应用过滤器等等:
http://www.raywenderlich.com/5689/beginning-core-image-in-ios-5
更新 1
因此,经过一些研究,我最终发现,与 OS X 版本的库相比,iOS 的 Core Image 仍然不完整。所以我搜索了很多,我找到了两个解决方案,一个更简单,另一个更广泛和复杂的库。
简单而简短的解决方案:https ://github.com/esilverberg/ios-image-filters
令人惊叹且值得编辑的库,用于使用 OpenGL 处理图像和视频,由Brad Larson编写的 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
在 Apple 发布 iOS 7 之后,一些开发人员找到了一种解决方法,可以与 Apple 在默认 iOS 应用程序中所做的相同,因为 Apple 没有为此提供 API。在我看来,最简单和更好的解决方案就是这个。为什么我认为它是最好的?因为即使它后面的某些视图移动了,模糊仍然可以很好地配合更新后的效果,正如我们所期望的那样。但是,请记住,它依赖于 iOS 7 SDK 才能工作,如果 Apple 更改 UIToolbar 可能会有风险。
更新 3
Apple 提到,在 WWDC 2013(Session 226 - Implementing Engaging UI on iOS)上,他们将在 UIImage 上提供一个名为UIImage+ImageEffects的类别类(我在 Google 上搜索过,并在此处找到,但可在Developer Portal 中找到 - 在搜索框)。使用此类别,您可以使用多种方法(浅色、深色、具有特定颜色等)在静态 UIImage 中应用模糊。另外,昨天我看到了这个组件,发现它非常有趣,因为您可以在框架中应用效果(基于上述类别)。
更新 4
最后,在 iOS 8 上,Apple 发布了可以轻松进行实时模糊的新类。使用UIVisualEffect
和UIVisualEffectView
,您可以快速为您的应用添加实时模糊。这是 Ryan Nystrom 关于如何使用这些类的一个很好的教程(一般来说是模糊的):
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 版本)
此解决方案适用于任何视图,而不仅仅是图像。
如果您在应用模糊时想要更多控制,您可以使用 Apple UIImageEffects
(可通过其示例代码获得)。
UIImageEffects
您可以从 Apple 的开发人员库中复制代码:模糊和着色图像
以下是如何使用它:
#import "UIImageEffects.h"
...
self.yourImageView.image = [UIImageEffects imageByApplyingLightEffectToImage:[UIImage imageNamed:@"yourImage.png"]];
查看Core Image Programming Guide。看起来风格化过滤器和模糊过滤器可能适合您的需求。我以前从未使用过 Core Image,但我认为可能会有一些很好的 WWDC 会议涉及它们。该文档在此处有一段基本的示例代码。