动图大家都会想到gif图片,但是在iOS端不能够播放gif格式图片怎么办呢。。。
其实苹果为开发者提供的控件足以让图片动起来,下面我选其中的一种使用UIImageView让图片动起来。。。
播放动图其实就是有许多张图片让他一张一张显示出来,在mac系统下打开gif格式图片就会看到,一张一张的图片,我们使用UIImageView播放图片其实就是让图片以动画的形式一张一张的播放出来;
使用UIImageView播放动图需要用到这些属性:
animationImages指向了NSArray说明这个就是存放所有需要播放的图片的数组;
animationDuration这个就是控制图片播放时间的属性;
animationRepeatCount这个是动画循环次数,默认是0,不循环;
这是需要用到的方法:
startAnimating方法是开始播放图片;
stopAnimating方法是结束播放图片;
isAnimating方法是判断图片是不是在播放;
下面直接上代码:
@property (nonatomic, strong)UIImageView *imageView;
首先创建存放图片的数组,并把图片存放到可变数组中:
NSMutableArray *tempArr = [NSMutableArray array];
for (int i = 0; i < count; i ++) {
//从bundle中获取的无缓存(图片所占用的内存会在一些特定操作后清除)
//behavior是定义的宏,是图片名字(例:head_01.jpg)
NSString *strImage = [NSString stringWithFormat:@"%@_%02d.jpg",behavior,i];
UIImage *image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:strImage ofType:nil]];
[tempArr addObject:image];
}
//把存放图片的数组传给UIImageView的播放动画的数组
self.imageView.animationImages = tempArr;
//设置动画播放时间
self.imageView.animationDuration = 5.0f;
//设置动画连续播放次数
self.imageView.animationRepeatCount = 1;
//开始播放动图
[self.imageView startAnimating];
//此时完事,但是有一个致命性问题,你看一下内存使用情况,已经要爆了吧,下面就是内存优化问题了
//当动画播放结束时延迟一秒我们释放掉self.imageView.animationImages的image对象
[self.imageView performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.imageView.animationDuration + 1.0f];
补充:如果使用bundle获取图片帧不要把图片拖到Assets.xcassets中获取,因为bundle获取的是当前程序可执行文件所在的目录下,而Assets.xcassets中得图片在编译时会被打包成Assets.car文件(想要获取Assets.xcassets中图片必须使用[UIImage imageNamed:]加载)。