gpt4 book ai didi

ios - 如何在 iOS 中对高斯模糊效果进行动画处理?

转载 作者:IT王子 更新时间:2023-10-29 07:55:24 53 4
gpt4 key购买 nike

对于整个 iOS 7 的感觉,我想对屏幕的特定部分应用模糊效果以对其进行模糊处理,但我不想立即将模糊处理掉,我想对其进行动画处理并进行动画处理这样用户几乎可以看到正在应用的模糊效果。

几乎就像在 Photoshop 中一样,您将高斯模糊值一点一点地从 0 更改为 10,而不是一次性从 0 更改为 10。

我已经尝试了一些解决方案,最流行的建议是简单地将模糊 View 放在非模糊 View 之上,然后降低模糊 View 的 alpha 值。

这可以,但不是很赏心悦目,因为没有过渡,它只是一个叠加层。示例:

enter image description here

有什么更好的方法可以达到这样的效果?我熟悉 GPUImage ,但不确定如何用它来完成它。

如果我可以控制它的模糊百分比,那就太好了,这样它就可以从用户交互地应用。 (例如:用户拖动到一半,模糊应用了一半等)

最佳答案

使用 iOS 9 及更高版本,您可以在视觉效果 View 上设置动画效果:

[UIView animateWithDuration:0.3 animations: ^ {
visualEffectView.effect = blurEffect;
} completion:nil];

这将实现动画模糊半径的预期效果。


我认为如果您从非模糊 View -> 模糊 View 为交叉淡入淡出设置动画,那将足够令人愉悦。您需要在非模糊 View 之上对模糊 View 的显示进行动画处理。

假设 blurView 是包含模糊效果的 View 。

以下是如何完成动画过渡的两个示例:

[UIView transitionWithView:self.view duration:0.3 options:UIViewAnimationOptionTransitionCrossDissolve animations: ^ {
[self.view addSubview:blurView];
} completion:nil];

这里我假设blurView已经设置好了,只是在动画中将adding as subview transition。

您还可以通过不同的方式实现此目的:

blurView.alpha = 0.0f;
[UIView animateWithDuration:0.3 animations: ^ {
blurView.alpha = 1.0f;
} completion:nil];

在这里,我将模糊 View 设为透明并为其外观设置动画。请注意,使用此方法不适用于 hidden,因此您要使用 alpha 属性。


如果你想交互式地控制模糊量,这里有一个关于如何实现的例子:

首先创建要模糊的 View 的图像:

UIGraphicsBeginImageContextWithOptions(nonBlurredView.bounds.size, NO, self.view.window.screen.scale);
[nonBlurredView drawViewHierarchyInRect:nonBlurredView.bounds afterScreenUpdates:NO];
UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();

保留这张图片。如果 View 已更改,您只想以类似的方式重绘。否则,您应该重用此图像,因为绘制层次结构的开销很大。

现在,当你需要模糊时,使用下面的代码:

CIImage *imageToBlur = [CIImage imageWithCGImage:snapshotImage.CGImage];    
CIFilter *gaussianBlurFilter = [CIFilter filterWithName: @"CIGaussianBlur"];
[gaussianBlurFilter setValue:imageToBlur forKey: @"inputImage"];
[gaussianBlurFilter setValue:@10 forKey: @"inputRadius"]; //Here you input the blur radius - the larger, the
CIImage *resultImage = [gaussianBlurFilter valueForKey: @"outputImage"];
UIImage *endImage = [[UIImage alloc] initWithCIImage:resultImage];

inputRadius 输入设置执行的模糊量。如果您对此进行动画处理,您将获得一种互动的感觉。

但我仍然认为前一种方法更容易,并且对用户来说感觉也一样好。

关于ios - 如何在 iOS 中对高斯模糊效果进行动画处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22031471/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com