1 // 2 // ViewController.m 3 // 091215TomCat 4 // 5 // Created by LongMa on 15/9/12. 6 // Copyright (c) 2015年 Dast. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewController () 12 - (IBAction)knockDown; 13 @property (weak, nonatomic) IBOutlet UIImageView *imgView; 14 - (IBAction)drink; 15 /** 16 * 对不同时间重构后的响应代码 17 * 18 * @param name 图片前面部分 19 * @param len 可变数组长度:图片个数 20 */ 21 - (void)catActionWithFrontName:(NSString*)name 22 andlength:(int)len; 23 24 @end 25 26 @implementation ViewController 27 28 - (void)viewDidLoad 29 { 30 [super viewDidLoad]; 31 32 } 33 - (IBAction)knockDown 34 { 35 [self catActionWithFrontName:@"knockout_" andlength:80]; 36 } 37 38 39 - (IBAction)drink 40 { 41 [self catActionWithFrontName:@"drink_" andlength:80]; 42 43 } 44 45 - (void)catActionWithFrontName:(NSString*)name 46 andlength:(int)len 47 { 48 //二、 为了防止动画执行时被其他时间打断,添加 49 if (self.imgView.isAnimating) 50 { 51 return;//正在运行就不响应点击事件,直接跳出方法。 52 } 53 54 // 一、实现动画(1.动画数组存的是图片对象 2.先设置播放次数和持续时间再开始动画)并提取重复代码 55 //1.准备UIImage对象数组 56 NSMutableArray *arr = [NSMutableArray array]; 57 58 for (int i = 0; i < len; i++) 59 { 60 // 拼接文件名 61 NSString *str = [NSString stringWithFormat:@"%@%02d.jpg", name, i ]; 62 // 转为UIImage对象 63 64 // 三、内存叠加问题:imageNamed方法会缓存图片,故改为从文件获得: 65 // 此时注意两点:1.非png格式要移到Supporting Files里(拖拽成棕色文件夹即成功) 66 // 2.代码里文件名要加上 类型后缀、 67 NSString *path = [[NSBundle mainBundle] pathForResource:str ofType:nil];//居然忘了 68 UIImage *img = [UIImage imageWithContentsOfFile:path]; 69 70 // 根据文件名查找图片并转化为图片对象 71 // UIImage *img = [UIImage imageNamed:str]; 72 // 对象加入临时的UIImage对象数组 73 [arr addObject:img]; 74 } 75 // 把临时可变数组赋值给 用于动画的UIImage对象数组 76 // 上面的都是为这一步准备 77 self.imgView.animationImages = arr; 78 79 // 设置并开始动画 80 [self.imgView setAnimationRepeatCount:1]; 81 [self.imgView setAnimationDuration:arr.count * 0.08]; 82 [self.imgView startAnimating]; 83 // 四、动画结束时释放内存 84 // self.imgView.animationImages = nil;//错误!程序环机制,需要设置时间延迟后再执行: 85 86 //注意:1.perform [email protected] 3.set+数组名+冒号 87 [self.imgView performSelector:@selector(setAnimationImages:) withObject:nil 88 afterDelay:arr.count * 0.08 + 1]; 89 } 90 @end
时间: 2024-11-03 16:59:42