「这是我参与2022首次更文挑战的第1天,活动详情查看: 2022首次更文挑战

这个知识点比较简单,主要是想对以往的所写的知识点做一个归纳总结,想到的,遇到的,看到的,有意思的,都记录下来。刚好项目里面遇到有加 GIF 图片的需求,就写一写,对于按钮加载 GIF ,也是类似的。

本地GIF

objective-c多张图片

多张图片组成的动图,正常我们遍历数组去获取图片,因为本地图片命名一般都是连续的,然后添加到一个数组里面去,来给到 animationImages 。我们还可以设置动画时间,重复次数。

UIImage *loadingImg01 = [UIImage imageNamed:@"pullup_nomove_bird_01"];
UIImage *loadingImg02 = [UIImage imageNamed:@"pullup_nomove_bird_02"];
UIImage *loadingImg03 = [UIImage imageNamed:@"pullup_nomove_bird_03"];
UIImage *loadingImg04 = [UIImage imageNamed:@"pullup_nomove_bird_04"];
NSMutableArray *animationImgs = [[NSMutableArray alloc] init];
[animationImgs addObject:loadingImg01];
[animationImgs addObject:loadingImg02];
[animationImgs addObject:loadingImg03];
[animationImgs addObject:loadingImg04];
_loadingImgView = [[UIImageView alloc] initWithFrame:self.bounds];
_loadingImgView.animationImages = animationImgs;
_loadingImgView.animationRepeatCount = 0;
_loadingImgView.animationDuration = 0.5;
[_loadingImgView startAnimating];

swift也是这么写,一样按上面的流程来添加到数组,即可,这里就不重复写代码了。

ojbective-c 本地GIF

objective-c我们可以使用第三方库SDWebImage,里面的#import "UIImage+GIF.h",有关于加载本地GIF方法。

关键方法是:sd_animatedGIFWithData。例子如下:

NSString *path = [[NSBundle mainBundle] pathForResource:@"home_around_icon" ofType:@"gif"];
NSData *data = [NSData dataWithContentsOfFile:path];
UIImage *image = [UIImage sd_animatedGIFWithData:data];

swift 本地GIF

swift我们可以使用第三方库 Kingfisher,里面的image.swift也有封装方法。方式不仅只有这一种写法。

let path = Bundle.main.path(forResource:"loading", ofType:"gif")
let data = NSData(contentsOfFile: path!)! as Data
let image = Kingfisher.image(data: data, scale: UIScreen.main.scale, preloadAllAnimateionData: true, onlyFirstFrame: false)

网络GIF

objective-c 网络GIF

加载网络GIF是比较简单的,直接使用第三方库SDWebImage,里面提供了sd_setImageWithURL方法,urlgif的网络地址即可。

[self.imageView sd_setImageWithURL:[NSURL URLWithString:imageUrl]];

swift 网络GIF

同理,swift一样是使用第三方库 Kingfisher,同样是用url作为gif的网络地址。

self.imageView.kf.setImage(with: url)

总体上写上了objective-cswift的关于GIF图片的加载,很多时候我们首页都是动态配置视图的,这时候接口不管返回GIF图片,还是普通图片格式也好,使用第三方库一行话就容易实现,所以更建议用第三方库去开发。

  • 私信