仿微博gif图播放,单图和九宫格完美适配

仿写思路:

1、无论单图还是九宫格,需要知道每一张图片是不是动图

2、在列表中需要知道,单个模块是否有动图需要播放

3、动图的播放、暂停、停止

仿写方法:

1、尝试了很多方法,去判断一个url是不是动图,但是效果都不是理想的,甚至不添加线程会出现阻塞主线程的现象,最终在SDWebImage中,发现加载图片中,会有一个回调,然后根据判断image的sd_isAnimated,得知是否是动图,如下图代码:

2、解决列表中,单个模块是否有动图,就根据scrollView的delegate,判断向上还是向下滑动,根据方法一做出的判断,找出合适的cell,然后暂停上一个gif,播放当前的gif

3、动图的暂停和播放,我尝试过拿到UIImageView的Layer,进行判断播放和暂停,在单图的情况下,效果还算可以,但是九宫格的时候,会出现不知道在什么时候播放下一张动图,即便是拿image的duration,然后增加一个NSTimer,还是不那么精确。在SDWebImage里面,存在一个SDAnimatedImageView,这是UIImageView的一个子类,里面有一个SDAnimatedImagePlayer,可以看到提供了方法有暂停播放,也提供了动图播放完一遍的回调,这样就完美解决,如下图代码:

特别提醒:一定要在遍历的时候,把gif进行禁止自动播放,否则会全部播放一遍gif,才会走写的逻辑。

//禁止自动播放,否则会导致全部gif自动播放一遍

cell.multiImageView.autoPlayAnimatedImage = NO;

附上demo:https://github.com/LiuYongCoder/PlayGifImage

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值