ios - 如何在 iOS 中对图像在一段时间内的模糊值进行动画处理

标签 ios core-animation uiviewanimation

我想在一段时间内(假设为 0.5 秒)将图像从 0 高斯模糊设置为 25 像素模糊值。我完全被这个问题困扰了。知道我该怎么做吗?

最佳答案

虽然将模糊半径从 0 逐渐调整到 25 似乎是理想的选择,但这可能会导致计算量过大。在 iPhone 5 上,使用 CIGaussianBlur 滤镜以 25 像素半径模糊一次 320x568 图像需要 600 毫秒。使用 UIImage+ImageEffects (在 WWDC 2013 downloads page 上)花费了 150 毫秒,该 UIImage+ImageEffects 使用 vImage high-performance image processing framework 。显然,尝试在 0.5 秒内重复模糊图像是站不住脚的。

但是,只需使用带有交叉溶解的 transitionWithView 将图像替换为模糊图像即可:

UIImage *blurImage = [self blur:imageView.image radius:25];

[UIView transitionWithView:imageView duration:0.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
    imageView.image = blurImage;
} completion:nil];

这会产生您所描述的过渡的平滑且非常令人信服的近似值。


此技术似乎也适用于 UIVisualEffectView 上的 iOS 8 UIBlurEffect:

UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];

UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];

visualEffectView.frame = imageView.bounds;

[UIView transitionWithView:imageView duration:0.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
    [imageView addSubview:visualEffectView];
} completion:nil];

关于ios - 如何在 iOS 中对图像在一段时间内的模糊值进行动画处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26375541/

相关文章:

iphone - 如何在 Notes iPad 应用程序中重新创建动画?

swift - UIViewPropertyAnimator 无法通过 View 之间的平移手势正确停止

iOS bringSubviewToFront 阻塞 UIView 动画

ios - NSUserDefaults 并使用 setobject 方法在 Swift 中存储 CLLocationCooperative2D 错误

ios - NSBundle.mainBundle().pathForResource 返回 nil

ios - 构建时的段错误代码 11 可能是由 Swift 项目中的 Objective-C Singleton 引起的

core-animation - NSWindow 增长动画(如快速查看窗口)

ios - CGAffineTransformMakeTranslation:如何一次应用两个动画

ios - 对于 UIView.animate block 内部还是外部的 in 循环?

ios - 当 super View 改变大小时,UILabel 位置不调整