我想在一段时间内(假设为 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/