@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/css/cuteeditor.css);

需求:
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.文档注释
使用块注释就能在输入代码自动完成的时候显示注释
/**      */

[iOS基础控件 - 3.4] 汤姆猫的更多相关文章

  1. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  2. [UI基础][不会说话的汤姆猫]

    会说话的汤姆猫这个APP层级风靡一时,其UI部分就是利用了序列动画的技术, 接下来 我们用汤姆猫来演示怎么制作序列动画. [要求]: 1.学会使用序列动画的方法 2.学会分析动画播放中内存占用高的问题 ...

  3. iOS 基础控件(下)

    上篇介绍了UIButton.UILabel.UIImageView和UITextField,这篇就简短一点介绍UIScrollView和UIAlertView. UIScrollView 顾名思义也知 ...

  4. [iOS基础控件 - 7.0] UIWebView

    A.基本使用 1.概念 iOS内置的浏览器控件 Safari浏览器就是通过UIWebView实现的   2.用途:制作简易浏览器 (1)基本请求 创建请求 加载请求 (2)代理监听webView加载, ...

  5. [iOS基础控件 - 6.11.3] 私人通讯录Demo 控制器的数据传递、存储

    A.需求 1.搭建一个"私人通讯录"Demo 2.模拟登陆界面 账号 密码 记住密码开关 自动登陆开关 登陆按钮 3.退出注销 4.增删改查 5.恢复数据(取消修改)   这个代码 ...

  6. [iOS基础控件 - 6.10.2] PickerView 自定义row内容 国家选择Demo

    A.需求 1.自定义一个UIView和xib,包含国家名和国旗显示 2.学习row的重用   B.实现步骤 1.准备plist文件和国旗图片     2.创建模型 // // Flag.h // Co ...

  7. [iOS基础控件 - 6.9] 聊天界面Demo

    A.需求 做出一个类似于QQ.微信的聊天界面 1.每个cell包含发送时间.发送人(头像).发送信息 2.使用对方头像放在左边,我方头像在右边 3.对方信息使用白色背景对话框,我方信息使用蓝色背景对话 ...

  8. iOS基础 - 控件属性

    一.控件的属性 1.CGRect frame 1> 表示控件的位置和尺寸(以父控件的左上角为坐标原点(0, 0)) 2> 修改这个属性,可以调整控件的位置和尺寸 2.CGPoint cen ...

  9. [iOS基础控件 - 6.12.3] @property属性 strong weak copy

    A.概念 @property 的修饰词   strong: 强指针/强引用(iOS6及之前是retain) weak: 弱智真/弱引用(iOS6及之前是assign)   默认情况所有指针都是强指针 ...

随机推荐

  1. HTTP/1.1 Range和Content-Range

    http://www.cnblogs.com/bayonetxxx/archive/2011/03/19/1989162.html 假设你要开发一个多线程下载工具,你会自然的想到把文件分割成多个部分, ...

  2. POJ1159——Palindrome(最长公共子序列+滚动数组)

    Palindrome DescriptionA palindrome is a symmetrical string, that is, a string read identically from ...

  3. Android开发之MediaPlayer和SurfaceView组成视频播放器

    SurfaceView 使用双缓冲技术 是个重量级的组件 只要不可见,就不会创建,可见时,才会创建 只要不可见,就会销毁 SurfaceView一旦不可见,就会被销毁,一旦可见,就会被创建,销毁时停止 ...

  4. 2013ACM省赛题目

    地址就贴这一个吧 都在附近 当时回来也没做做 一伤心了 二是当时实在太弱了 先补两道DP E题的区间DP dp[i][j]  截止到i位置以字母j为结束的上升序列 正序 逆序各来一遍 再循环一遍保存一 ...

  5. mappingResources,annotatedClasses(映射)

    这两个是有本质区别的,光看名字也能看出来,哈哈,好了,入正题: mappingResources用于指定少量的hibernate配置文件像这样 Xml代码 1 2 3 4 5 6 7 <prop ...

  6. ExecutorService.execute(Runnable x) 判断是否完成,得到返回值

    public class RunnableTestMain { public static void main(String[] args) { ExecutorService pool = Exec ...

  7. bzoj4008

    好题,这题可以分开算每个技能的贡献 orz popoqqq http://blog.csdn.net/popoqqq/article/details/45365759 ..,..] of double ...

  8. [原]Unity3D深入浅出 - 脚本开发基础(Scripts)

    常用脚本事件: Update:每帧调用一次 Start:在第一次Update执行前调用 Awake:脚本实例在创建时调用 FixedUpdate:每个固定物理时间间隔调用一次 LateUpdate:每 ...

  9. ASP.NET Identity(处理身份数据存储) 与 OWIN主机(实现katana验证授权)原理概括

    ASP.NET Identity 是4.5中引入的,支持Clamis(声明)式样登陆[即认证和授权分开模式],结合owin可以实现cookie加密等功能. 1.ASP.NET Identity架构框架 ...

  10. (翻译)Entity Framework技巧系列之十 - Tip 37 - 41

    提示37. 怎样进行按条件包含(Conditional Include) 问题 几天前有人在StackOverflow上询问怎样进行按条件包含. 他们打算查询一些实体(比方说Movies),并且希望预 ...