如何在应用模糊的情况下交叉淡化 UIImageView 的图像

Posted

技术标签:

【中文标题】如何在应用模糊的情况下交叉淡化 UIImageView 的图像【英文标题】:How to cross-fade the image of UIImageView with blur applied 【发布时间】:2015-04-22 22:59:02 【问题描述】:

我正在尝试交叉淡入淡出到新图像。这是一个添加了 UIVisualEffectView 的 UIImageView:

self.bgBlurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
self.visualEffectView = [[UIVisualEffectView alloc] initWithEffect:self.bgBlurEffect];

self.visualEffectView.frame = self.bgImageView.bounds;
[self.bgImageView addSubview:self.visualEffectView];

这是我尝试淡入新图像的方式:

UIImage *toImage = [UIImage imageNamed:imgName];

CABasicAnimation *crossFade = [CABasicAnimation animationWithKeyPath:@"contents"];
crossFade.duration = 2.5;
crossFade.delegate = self;
crossFade.fromValue = (id)self.bgImageView.image.CGImage;
crossFade.toValue = (id)toImage.CGImage;
[self.bgImageView.layer addAnimation:crossFade forKey:@"animateContents"];
self.bgImageView.image = toImage;

这实际上在模拟器中有效,但在设备(iPhone 6)上,图像完全变灰 2.5 秒,然后新图像立即出现。有关如何解决此问题的任何想法?

编辑:这也不起作用:

[UIView transitionWithView:self.bgImageView
                  duration:2.5
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^
                    self.bgImageView.image = toImage;
                 completion:nil];

【问题讨论】:

【参考方案1】:

也许这种方法适用于淡入淡出动画:

self.bgImageView.image = toImage;

CATransition *fadeTransition = [CATransition animation];
fadeTransition.duration = 2.5;
fadeTransition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
fadeTransition.type = kCATransitionFade;

[self.bgImageView.layer addAnimation:fadeTransition forKey:nil];

【讨论】:

那行不通。 self.bgImageView.image = toImage; 立即设置新图像。然后 2.5 秒后它变得模糊。 @soleil 尝试将 visualEffectView 添加到您要添加 bgImageView 的同一个视图中,并确保它在 bgImageView 上方以便它模糊它(您还需要给它相同的框架以便它将涵盖所有内容)。我试过了,它对我有用。

以上是关于如何在应用模糊的情况下交叉淡化 UIImageView 的图像的主要内容,如果未能解决你的问题,请参考以下文章

使用 FFMPEG 高效连接和交叉淡化 .ts 文件

如何进行 uibutton 缩小然后交叉模糊?

如何在不影响带有 html/css 的子元素的情况下应用不透明度?

Pandas:如何在不使用 scikit 的情况下进行交叉验证?

OpenGL中的交叉淡入淡出场景

在 KFold 交叉验证的情况下如何显示平均分类报告和混淆矩阵