iOS 为视图设置模糊动画
Posted
技术标签:
【中文标题】iOS 为视图设置模糊动画【英文标题】:iOS animate a blur for a view 【发布时间】:2012-11-03 15:17:09 【问题描述】:我想快速为 UIView 上的模糊设置动画,以在我的应用中用作过渡。我不知道从哪里开始。我相信核心形象是完成这项工作的合适工具。谁能指出我如何模糊 UIView 的示例?我假设我需要将视图转换为单个 UIImage,但我不知道从那里开始。
提前致谢!
【问题讨论】:
iphonedevwiki.net/index.php?title=CAFilter 尝试使用您的 UIView 但由于 CIGaussianBlur 从 5.1 开始在 ios 上不存在,您可能需要在 5.x 和更早版本上找到一种不同的方法来完成此操作。 【参考方案1】:拍摄视图的快照并使用 Brad Larson 的 GPUImage(GPUImageGaussianBlurFilter)让我得到了一些不错的结果。
为了使视图动画化,我使用模糊图像创建了一个 ImageView,并将 alpha 通道从 0 设置为 1 以使模糊逐渐出现。
或者,我认为可以增加每帧的模糊大小。
#import "GPUImage.h"
...
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
...
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
...
GPUImageGaussianBlurFilter * filter = [[GPUImageGaussianBlurFilter alloc] init];
filter.blurSize = 0.5;
UIImage * blurred = [filter imageByFilteringImage:image];
【讨论】:
感谢您的回答,效果很好,但是现在GPUImage框架发生了变化,并且属性blurSize已经被移除。我尝试使用新属性:filter.blurRadiusInPixels = 50;
但我的快照上的模糊效果不够强,您对此有什么想法吗?如果我尝试添加一个高于 200 的值,我的应用程序就会崩溃..【参考方案2】:
你需要一个uiview层的rasterizeScale,下面是给UIVIew添加模糊效果的代码:
CALayer *layer = [self.blurView layer];
[layer setRasterizationScale:0.3];
[layer setShouldRasterize:YES];
详情参考Apple Documentation of CALayer,另外这个tutorial可能对你有帮助,希望对你有帮助
【讨论】:
这太丑了……我希望有更干净的东西。我假设我可以为 rasterizationScale 属性设置动画?【参考方案3】:我最近做了一些测试,用不同的模糊设置模糊了一系列图像,并简单地使用 UIImageView 为它们设置动画。你可能想看看:
AnimatedGaussianBlur
【讨论】:
以上是关于iOS 为视图设置模糊动画的主要内容,如果未能解决你的问题,请参考以下文章
为“幻灯片”iOS UIView 设置动画,但关联的子视图不移动