UIImageView在UITableView上动画效果不显示本

2022-03-05  本文已影响0人  林大鹏

一. 背景

最近做项目的时候遇到一个问题,就是UITableViewCellUIImageView加载gif图有时候可以正常显示动画效果,有时候不显示动画效果。基于这个问题,做了一下分析,找到原因并记录一些。

二. 问题定位

经过调试定位,发现问题的原因在于,项目里面UITableViewCellUIImageView加载gif图,是单独拿出来,获取到图片数据之后,单独设置,而不是直接在UITableViewCell生成之后去设置的。

就类似如下场景:

加载逻辑.png

因此当imageView去加载gif图之后,然后UITableView调用reloadData方法,这时imageView加载的gif的动画效果就不显示,而是展示静态图.

具体表现如下:

cellImageLoad.gif

因此问题的本质原因就在于UITableViewreloadData里面做了什么操作,将UIImageView的图片的动画效图移除了。

三. 原因解析

A. UIImageView的动效形式

这里我们先将会移除动画效果的[self.tableView reloadData];注释掉,然后在tableView的点击方法里,加一个休眠5s的逻辑.

image.png

我们可以发现,即使在主线程休眠了5s或者执行其他耗时的操作,图片的动画效果依然继续执行,就可以证明UIImageView的动画是一个CAAnimation动效。

B. UITableViewreloadData是否移除`CAAnimation动效

image

我们在FJFSecondAnimationCelltestButton添加一个摇晃的CAKeyframeAnimation动画,然后在监听动画的startstop方法,判断UITableView调用reloadData方法后,发生了什么。

image

从日志输出中我们可以很容易的看出,UITableView调用reloadData方法后,testButton的动画被移除了,执行了动画的stop代理方法。

四. 总结

经过以上的分析,我们可以得出结论,UIImageView加载的动效图,在UITableView上会偶然不显示的原因是:

五. 解决方法

image.png
上一篇 下一篇

猜你喜欢

热点阅读