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 的集合视图中为内容偏移设置动画?

为“幻灯片”iOS UIView 设置动画,但关联的子视图不移动

在 iOS 中仅沿路径的一部分为视图设置动画

Swift:removefromSuperview 移除约束

SwiftUI 如何临时为视图颜色的前景颜色设置动画?

如何在 iOS 中为两个 UIView 翻转设置动画?