#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *animationImageView;
@end
@implementation ViewController
-(NSMutableArray *)imgDate:(NSInteger)senderTag{
//定义一个数组,用来存储图片的数量
NSArray *array=[NSArray array];
array=@[@26,@13,@81,@40,@28,@30,@30,@81,@24,@56,@34];//老师提供的素材对应动作的图片数量
//定义数组存放字符串,用来作为图片名的前半部分,拼接图片名
NSArray *strArr=[NSArray array];
strArr=@[@"angry",@"cymbal",@"drink",@"eat",@"fart",@"footLeft",@"footRight",
@"knockout",@"pie",@"scratch",@"stomach"];
//定义一个数组,用来存放加载的动作的图片
NSMutableArray *imgArray=[NSMutableArray array];
//通过sender.tag来获取图片资源
for (int i=0; i<[array[senderTag] intValue]; i++) {
NSString *stringImageName=[NSString stringWithFormat:@"%@_%02d",strArr[senderTag],i];
//下面的方法比较耗费内存,因为imageNamed加载图片到内存之后,在内存中不会自动被释放,图片加载过多就造成内存占用过大
//UIImage *img=[UIImage imageNamed:stringImageName];
//解决类存过大方法如下
NSBundle *bundle=[NSBundle mainBundle];
// NSLog(@"%@",bundle);
//获取文件路径
NSString *strPath=[bundle pathForResource:stringImageName ofType:@"jpg"];
//从一个路径获取图片
//事实上,经过系统处理,图片被加载到了/Users/mac/Library/Developer/CoreSimulator/Devices/C6BECAE3-5586-4E39-A86D-BE981FDED53C/data/Containers/Bundle/Application/CD1E7E49-66DF-47CF-806C-BE2FF577BB59目录下,但是被包装成了.car文件,无法被正常读取
//此时,我们可以创建一个虚拟文件夹,就是将图片拷贝到跟目录下,使用copy groups选项创建,用来存放这些图片
UIImage *img=[UIImage imageWithContentsOfFile:strPath]; //将图片加入图片数组
[imgArray addObject:img];//将图片加入数组
}
return imgArray;//返回这个对应senderTag的数组,也就是通过按钮的tag值获取对应的动作图片数组
}
-(IBAction)startAnimation:(UIButton *)sender{
//动画不允许被打断,判断isAnimation
if (self.animationImageView.isAnimating) {
return;
}
//获取sender.tag对应的图片数组
self.animationImageView.animationImages=[self imgDate:sender.tag];
//控制动画执行次数
self.animationImageView.animationRepeatCount=1;
//控制动画执行时间
self.animationImageView.animationDuration=[self imgDate:sender.tag].count/12;//12张图片一秒
//开始动画
[self.animationImageView startAnimating];
//动画结束之后,释放内存
//此处的(setAnimationImages:)是imageView空间自带的set方法
[self.animationImageView performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.animationImageView.animationDuration+0.01];
}
|
|