上面具有UIVisualEffectView时,对UIImageView的图像变化进行动画处理

时间:2019-12-19 15:11:40

标签: ios objective-c animation uivisualeffectview

我的问题如下:

UIImageView的视图将通过动画进行更改,如下所示:

[UIView transitionWithView:_backgroundArtworkImageView
                  duration:ANIMATION_DURATION
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^{
                    _backgroundArtworkImageView.image = blurredImage;
                }
                completion:nil];

只要我在图像视图上没有UIVisualEffectView,它就可以很好地工作。如果在顶部使用模糊视图,则根本不会产生动画。

我环顾了一下,发现snapshots of views可能值得研究,这似乎也是Apple内部在iOS上使用的东西,例如在启动应用切换器时;我不太确定如何正确地解决它。

1 个答案:

答案 0 :(得分:0)

通过拍摄快照使其工作,将其附加到超级视图,隐藏真实视图,在不使用动画的情况下进行更改,然后使用动画淡入真实视图。

__block UIView *snapshot = [_backgroundArtworkImageView snapshotViewAfterScreenUpdates:NO];
[_artworkContainer insertSubview:snapshot belowSubview:_backgroundArtworkImageView];
_backgroundArtworkImageView.alpha = 0.0f;
_backgroundArtworkImageView.image = blurredImage;

[UIView transitionWithView:_artworkContainer
                  duration:ANIMATION_DURATION
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:^{
                    _backgroundArtworkImageView.alpha = 1.0f;
                }
                completion:^(BOOL _) {
                    [snapshot removeFromSuperview];
                    snapshot = nil;
                }];

编辑:我意识到模糊视图的更新花费了一些时间,但是解决了可以获取结果视图的新快照然后对其进行动画处理的问题。