SDWebImage分享gif到微信,图片不动

面试的时候,经常有面试官问:你开发中,都遇到过什么印象深的bug啊,你是怎么解决的啊。
今天呢,就在这记录一个问题,顺便整理一下思路,有需要的童鞋可以参考。

问题描述:
SDWebImage 4.0 + 友盟分享,在分享gif图片到微信/QQ的时候,分享的图片为静态图

初遇到时,一时没思路,解决了一会儿,发现毫无进展,然后我就在想,这到底是哪出了问题,于是慢慢里思路:

解决思路:
1 查看图片格式?微信分享不支持webp格式图片(已排除)
2 查看友盟微信分享,看看是不是有所改动?(已排除)
3 其他

这下犯难了,然后又看微信分享代码 (友盟 -> 微信分享 -> WXApiObject ),发现它需要传递一个 emoticonData(NSData) 类型数据,难道是 SDWebImage 在下载gif动图,转成 NSData 类型时,数据有问题?

再次分析:
根据 SDWebImage 框架的提供的 UIImage+GIF.h 中的
(UIImage *)sd_animatedGIFWithData:(NSData *)data; 可以知道,此方法是加载 gif 图片用的,那么我么搜索一下,到底哪个
法调用了它呢? 结果发现,UIImage+MultiFormat.h 中的
(nullable UIImage *)sd_imageWithData:(nullable NSData *)data调用了,这个代码,在里边判断了图片格式到底是什么格式。

SDWebImage分享gif到微信,图片不动_第1张图片
UIImage+GIF.png

SDWebImage分享gif到微信,图片不动_第2张图片
UIImage+MultiFormat.png

经过断点调试,发现,即使是gif图片,在走 sd_imageWithData() 方法时,也为调用
image = [UIImage sd_animatedGIFWithData:data]; 次方法。
嘿,这就奇怪了。
不过,总算定位到问题原因所在了,接下来就好办了。

于是乎,经过一番查阅,终于让我发现了这篇文章,
http://www.neilwu.me/tech/SDWebImage-with-FLAnimatedImage
尝试之后,发现,可行。

操作如下:(此操作跟文章中,介绍的少有不同,请因地制宜)
把 SDImageCache.m 中一个方法 diskImageDataBySearchingAllPathsForKey
放到 SDImageCache.h 中,然后在调用 根据 url 把图片转成 NSData 的时候调用
NSData *imageData = [[SDWebImageManager sharedManager].imageCache diskImageDataBySearchingAllPathsForKey: self.gifURL];

binggo ,发现问题解决了!!!

你可能感兴趣的:(SDWebImage分享gif到微信,图片不动)