ios- UIImageView 序列帧实现gif图直播送礼效果

tech2026-01-17  5

UIImageView 或者 CALayer   +定时器类

1.使用 【 UIImage imageWithContentsOfFile】从磁盘映射方式加载图片数据流(创建了一个文件映射数据, 图片文件既没有真正被加载到内存, 更没有被解码成位图的形式可供Core Animation渲染) 2.讲UIImage 赋值给 UIImageView这个过程,隐式的CATransaction(事物)会捕获到imageView图层树的变化,并在下一个runloop到来时提交事务,处理过程中包涵1.分配缓冲区管理文件IO和解压缩操作2.讲文件数据从磁盘读到内容中,3.将压缩的图片数据解码成位图形式(将图片的二进制数据转换成像素数据) 4.最后由CoreAnimation将位图数据通过gpu渲染到UIimageview图层,其中解压缩是个非常耗时的cpu操作,默认是主线程执行,卡顿,影响流畅性,而且位图数据会消耗很多内存。

 

组合方式 CALayer+delegate+CADisplayLink来实现核心动画CAKeyframeAnimation形式

1.使用 【 UIImage imageWithContentsOfFile】方法从磁盘中加载大图,不进行缓存

2.CADisplayLink是根据屏幕刷新触发返回,通过累加返回确定下一帧图片的播放时刻,在当前关键帧里,异步进行图片强制解压缩生成位图数据并提供给CALayer显示,防止阻塞主线程,,当播放到下一张时候,上一张图片数据已无任何引用,内存也得到释放。

3.后续  减少上下文切换解压缩进行预加载,用delegate回调播放进度,图片资源下载更新管理等操作

 

https://www.jianshu.com/p/094c2c0f209e

http://www.cocoachina.com/articles/18784

https://www.jianshu.com/p/4135b7de046c

最新回复(0)