[iOS基础控件 - 3.4] 汤姆猫

需求:
1.点击按钮播放相应动画
2.点击汤姆猫身体部分(头、脚、尾巴)显示动画
3.当前正在播放动画不可触发其他动画
4.优化缓存、内存管理
 
 
A.序列帧动画
#1. png格式的文件可以不带扩展名访问,而且可以放到”Images.scassets”的组中预览,jpg只能放到support file中了,而且访问的时候要写上扩展名
#2. 在ViewController中的属性栏可以设置storyboard模型的大小
 
#3. 拖入文件夹的时候要选择“Create Groups"才能正确引用,不要选择”Create Folder References"
     1.Create groups for any added folders:把选择的文件添加到工程的group下,如果你选择的是文件,则把文件夹认为是group。他添加的文件夹对应的工程目录和文件路径不一定是一一对应的。你可以删除文件,可以把这个文件删除在工程外,也可以删除文件对应的本地文件。应该它生成的文件夹是黄色的。
     2.Create folder references for any added folders:这种方法是建立一个文件夹的索引,同时文件夹中的所有文件也会添加到整个工程。他添加的文件夹对应的工程目录和文件路径是一一对应的。你要删除其中的文件的话可以直接到文件目录下把文件删除,然后再刷新一下目录,文件就会被删除了。这样添加文件夹的方法很方便,你在做cocos2d的工程时应该会经常用到。应该他生成的文件夹是蓝色的
 
#4. 整型占位符的0填充:  %02d代表两位整型,高位不满的用0填充
 
1.动画执行方法
1     self.tom.animationImages = images; // 存储了多张组成动画的图片
2    
3     [self.tom setAnimationRepeatCount:1]; // 默认0是无限次
4     [self.tom setAnimationDuration: images.count/FramesCount];
5     [self.tom startAnimating];
 
2.图片缓存机制&释放内存
a.使用          UIImage *image = [UIImage imageNamed:fileName];
会存储图片到混存,加载大量图片的时候会消耗大量内存 
1         // imageNamed: 有缓存
2 //        UIImage *image = [UIImage imageNamed:fileName];
3        
4         // imageWithContentOfFile: 没有缓存(传入文件的全路径)
5         NSBundle *bundle = [NSBundle mainBundle];
6         NSString *path = [bundle pathForResource:fileName ofType:nil];
7         UIImage *image = [UIImage imageWithContentsOfFile:path];
 
b.释放图片内存
    [self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.tom.animationDuration + 1];
 
 
B.汤姆猫主要代码 (使用storyboard拖曳控件方式)
 
 1 #import "ViewController.h"
 2 
 3 #define FramesCount 24 // 动画帧数/秒
 4 
 5 @interface ViewController ()
 6 @property (weak, nonatomic) IBOutlet UIImageView *tom;
 7 
 8 - (IBAction)drink;
 9 - (IBAction)knockHead;
10 
11 @end
12 
13 @implementation ViewController
14 
15 - (void)viewDidLoad {
16     [super viewDidLoad];
17     // Do any additional setup after loading the view, typically from a nib.
18     
19 }
20 
21 - (void)didReceiveMemoryWarning {
22     [super didReceiveMemoryWarning];
23     // Dispose of any resources that can be recreated.
24 }
25 
26 /** 点击牛奶按钮 */
27 - (IBAction)drink {
28     [self runAnimationWithName:@"drink" andCount:80];
29 }
30 
31 /** 点击头部 */
32 // 实质是在头部放置了一个不带文字的透明按钮
33 - (IBAction)knockHead {
34     [self runAnimationWithName:@"knockout" andCount:80];
35 }
36 
37 /** 运行相应动画 */
38 - (void) runAnimationWithName:(NSString *) animationName andCount:(int) count {
39     if (self.tom.isAnimating) return;
40     
41     NSMutableArray *images = [NSMutableArray array];
42     for (int i=0; i <= count; i++) {
43         NSString *fileName = [NSString stringWithFormat:@"%@_%02d.jpg", animationName, i];
44         
45         // imageNamed: 有缓存
46 //        UIImage *image = [UIImage imageNamed:fileName];
47         
48         // imageWithContentOfFile: 没有缓存(传入文件的全路径)
49         NSBundle *bundle = [NSBundle mainBundle];
50         NSString *path = [bundle pathForResource:fileName ofType:nil];
51         UIImage *image = [UIImage imageWithContentsOfFile:path];
52         
53         [images addObject:image];
54     }
55     
56     self.tom.animationImages = images; // 存储了多张组成动画的图片
57     
58     [self.tom setAnimationRepeatCount:1]; // 默认0是无限次
59     [self.tom setAnimationDuration: images.count/FramesCount];
60     [self.tom startAnimating];
61     
62     [self.tom performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.tom.animationDuration + 1];
63 }
64 
65 
66 @end
 
C.文档注释
使用块注释就能在输入代码自动完成的时候显示注释
/**      */

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。