美文网首页
当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需要显示动态图,我是这么干的

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