我想在UIImageView上应用磨砂玻璃效果。
我尝试了实现我在这个问题中找到的方法,但结果不是很理想。 我想要得到类似这样的效果:
此外,我们可以看到iOS 7在许多地方都使用了这种效果。我们如何复制它?
我想在UIImageView上应用磨砂玻璃效果。
我尝试了实现我在这个问题中找到的方法,但结果不是很理想。 我想要得到类似这样的效果:
此外,我们可以看到iOS 7在许多地方都使用了这种效果。我们如何复制它?
这里有一个关于CoreImage的好教程,展示了如何应用滤镜等:
http://www.raywenderlich.com/5689/beginning-core-image-in-ios-5
更新1
所以经过一些研究,我最终发现iOS的Core Image与OS X版本的库相比仍然不完整。因此我进行了大量搜索,找到了两个解决方案,其中一个更简单,另一个是更全面和复杂的库。
处理图像和视频的惊人的、值得编辑的OpenGL库,GPUImage由Brad Larson开发。 它比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之后,一些开发者找到了一个解决方法,可以做到与苹果默认的iOS应用程序相同的效果,因为苹果没有提供API。 我认为最简单且最好的解决方案是这个。为什么我认为它是最好的?因为即使在其后面的某个视图移动时,模糊效果仍然与我们期望的效果一样良好。不过,请注意,它需要iOS 7 SDK才能运行,并且如果苹果更改UIToolbar,则会存在风险。
更新3
苹果在WWDC 2013(Session 226 - Implementing Engaging UI on iOS)中提到将提供一个名为UIImage + ImageEffects的UIImage类别类(我通过此处查到了此信息,在Developer Portal上搜索UIImageEffects即可找到)。使用此类别,您可以对静态UIImage应用模糊效果,使用多种方法(明亮、黑暗、带有特定颜色等)。此外,昨天我看到了这个组件,发现它非常有趣,因为您可以在框架中应用效果(基于上述类别)。
更新4
最后,在iOS 8上,苹果发布了新的类,可以轻松地实现即时模糊效果。使用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)]];
}
< p >(假设您的iOS版本不低于iOS 7;如果低于iOS 7,您将需要在else
块中测试iOS版本)此解决方案适用于任何视图,而不仅仅是图像。
如果你想在应用模糊效果时有更多的控制,可以使用苹果公司提供的UIImageEffects
(可通过其示例代码获得)。
你可以从苹果开发者文库中复制UIImageEffects
的代码:对图像进行模糊和着色
以下是如何使用它:
#import "UIImageEffects.h"
...
self.yourImageView.image = [UIImageEffects imageByApplyingLightEffectToImage:[UIImage imageNamed:@"yourImage.png"]];
看一下核心图像编程指南。似乎样式化滤镜和模糊滤镜可能适合您的需求。我以前从未使用过Core Image,但我认为有一些很好的WWDC会议涉及它们。文档中有这里一个基本的示例代码。
NSArray *properties = [CIFilter filterNamesInCategory:kCICategoryBuiltIn]; NSLog(@"%@", properties);
- Natan R.