「这是我参与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
方法,url
为gif
的网络地址即可。
[self.imageView sd_setImageWithURL:[NSURL URLWithString:imageUrl]];
swift 网络GIF
同理,swift
一样是使用第三方库 Kingfisher
,同样是用url
作为gif
的网络地址。
self.imageView.kf.setImage(with: url)
总体上写上了objective-c
和swift
的关于GIF图片的加载,很多时候我们首页都是动态配置视图的,这时候接口不管返回GIF图片,还是普通图片格式也好,使用第三方库一行话就容易实现,所以更建议用第三方库去开发。