美文网首页
当App需要显示动态图,我是这么干的

当App需要显示动态图,我是这么干的

作者: Duke_Young | 来源:发表于2016-11-19 18:41 被阅读1139次

老大说,咱们网站的图要支持动图,这样网站会有意思地多

所以我们是要往A站B站的二次元方向发展吗
所以咱们的App也要支持动态图片
关于支持GIF动图这件事,我第一反应就是

CGImageSourceRef source = CGImageSourceCreateWithData((CFDataRef)data, nil);
size_t count = CGImageSourceGetCount(source);
float allTime = 0;
NSMutableArray *imageArray = [[NSMutableArray alloc] init];
NSMutableArray *timeArray = [[NSMutableArray alloc] init];
for (size_t i=0; i<count; i++) {
  CGImageRef image = CGImageSourceCreateImageAtIndex(source, i, NULL);
  [imageArray addObject:[UIImage imageWithCGImage:image]];
  CGImageRelease(image);
  NSDictionary *info = (__bridge NSDictionary *)CGImageSourceCopyPropertiesAtIndex(source, i, NULL);
  NSDictionary *timeDic = [info objectForKey:(__bridge NSString *)kCGImagePropertyGIFDictionary];
  CGFloat time = [[timeDic objectForKey:(__bridge NSString *)kCGImagePropertyGIFDelayTime] floatValue];
  [timeArray addObject:[NSNumber numberWithFloat:time]];
  allTime += time;
}
        
UIImage *image = [UIImage animatedImageWithImages:imageArray duration:allTime];
dispatch_async(dispatch_get_main_queue(), ^{
  self.image = image;
});

通过NSURLSession下载下来图片,然后经过简单处理变成UIImage。ps:这里忽略完全无视了帧与帧之间的时间间隔问题

捂脸

事情总是一步一步来的嘛,这样子已经解决了动图显示的问题了,不会再是总显示图片第一帧的样子了。
之前的UIImageView都是使用的AFNetworking提供的UIImageView+AFNetworking.h,然而它并不支持GIF,只会显示第一帧。而它提供的方法直接返回的就是UIImage,所以经过仔细的阅读源码,终于在AFURLResponseSerialization.m里找到了这个方法

+ (UIImage *)af_safeImageWithData:(NSData *)data

将上面处理NSData到UIImage的方法粘进去,嗯,perfect,完美融入项目,我真是太机智了。

然而,事妈龟毛处女座的我对那个Unlock和xxxx的提示(忘了怎么提示的了)真的难以接受,于是在衡量了自己写NSURLSessionDataTask下载图片与UIImageView+AFNetworking.h混用并添加缓存机制(我很懒的用了AFNetworking提供的……)的工作量之后,我毅然决然地选择了

SDWebImage

然后在两分钟的pod install之后
[self sd_setImageWithURL:url placeholderImage:placeholderImage];

完工~~


所以你花了一下午时间都干了什么!!

相关文章

  • 当App需要显示动态图,我是这么干的

    老大说,咱们网站的图要支持动图,这样网站会有意思地多 所以我们是要往A站B站的二次元方向发展吗所以咱们的App也要...

  • 2018-10-29

    原来动态图表这么简单 3分钟学会VLOOKUP动态图表,定义名称制作动态图表,你相信吗?就是这么简单...

  • UIImage图片无限滚动的实现

    当app需要切换显示的图片少时,可以使用创建多个UIImageView,来实现多个图片切换显示;但是在图片较多时,...

  • Swift 玩转gif

    众所周知,iOS默认是不支持gif类型图片的显示的,但是我们项目中常常是需要显示gif为动态图片。那肿么办?第三方...

  • 动态添加view 设置view之间的间隔

    在写一个应用商城的APP,有一个页面需要显示APP的详细信息,有多个APP截图需要显示:如: 这个时候就需要动态添...

  • 动感十足的Excel图表制作原来这么简单

    **- 1 - **场景 如图所示源数据,现在需要制作出日期为带有下拉框的动态图表,即选择不同的月份,显示相应月份...

  • flutter 强制横屏,控制横竖屏显示

    今天 我们的主题是控制手机横竖屏显示需求很明确,整个app都是竖屏显示,但某一个页面需要横竖屏显示 1.进入app...

  • AppStore上架审核要求或注意事项

    1、当app是一个需要访问网络的app时,需要添加Reachalility网络状态监听提示。2、app需要支持IPv6

  • android webview 显示doc,pdf文件

    项目需要在app中直接显示doc,pdf文件。要么是文件需要像pdf阅读App一样阅读,可以采用下面方案一,要么是...

  • Android-->RecyclerView 显示底部,滚

    当你在做聊天界面的时候, 通常进入界面后, 都需要显示到最底部, 鹅场也是这么干的; 很容易就能找到 Recycl...

网友评论

      本文标题:当App需要显示动态图,我是这么干的

      本文链接:https://www.haomeiwen.com/subject/xkrepttx.html