在网页中,可以使用gif来显示动态图。但在iOS开发中,使用gif图来替换png等静态图,
也不能使得UIImageView加载渲染出动态效果。可以使用两种方案来达到此效果。
一 设置 animationImages
UIImageView *demoImgView = [[UIImageView alloc] initWithFrame:CGRectMake(250, 160, 30, 14)];
NSMutableArray *animatedImages = [[NSMutableArray alloc] initWithCapacity:41];
for (int i = 1; i < 42; i++) {
NSString *animatedImageName = [NSString stringWithFormat:@"demoImage_%d",i];
UIImage *animatedImage = [UIImage imageNamed:animatedImageName];
[animatedImages addObject:animatedImage];
}
self.demoImgView.animationImages = animatedImages;
self.demoImgView.animationRepeatCount = MAXFLOAT;
self.demoImgView.animationDuration = 41 / 30;
[self.demoImgView startAnimating];
代码解释:
1. 第3行 实例化一个UIImage实例对象组成的数组
2. 第10行 设置animationImages数组,相当于设置UIImageView的内容
3. 第11行 设置重复次数,这里使用 MAXFLOAT 希望不断重复
4. 第12行 动画周期 需要注意的是:值应该为 数组中UIImage实例对象个数 / 希望帧率。
可以参看文字注释:
@property (nonatomic) NSTimeInterval animationDuration;
// for one cycle of images. default is number of images * 1/30th of a second (i.e. 30 fps)
之前以为是:UIImage实例对象个数 * 每个UIImage实例对象显示的时长,这样设置会一直显示不了动图
5. 第13行 开始执行动画,此行也必不可少。
二 借助 YYKit 的 YYAnimatedImageView 对象
YYImage *image = [YYImage imageNamed:@"wall-e.webp"];
image.preloadAllAnimatedImageFrames = YES;
YYAnimatedImageView *imageView = [[YYAnimatedImageView alloc] initWithImage:image];
imageView.autoPlayAnimatedImage = NO;
[imageView startAnimating];
这个比较简单,摘抄的是 YYKit 的示例项目: YYKitDemo 的 YYTextAttachmentExample.m 文件的代码。
只要将gif、webp等动态图实例化一个 YYImage 对象即可。