3.Tom猫的实现(帧动画播放)
目的:Tom猫是大家都熟悉的一款软件。点击Tom身上不同的位置,让它做出不同的反应。另外点击喂食等按钮做出相应的动作,代码尽量精简。
实现:在Tom身上根据区域设置多个Button,其Text Color属性设置为Clear Color。然后将多个Button设置不同的名字和Tag,将所有Button链接到run这个行为,在run方法中根据传入的butto Name和tag 条用函数调用函数播放动画。
由于博客限制图片的大小2M,所以生成的动画有些失真:
1.代码实现
// 根据参数不同,进行相应的操作
- (void)tomAnimation:(NSInteger)count andAct:(NSString *)act
{// 判断是否在动画,否的话执行动画if([self.imageView isAnimating]) return ;// 序列帧动画 -》顺序播放// 动画图片数组NSMutableArray *arraym = [NSMutableArray array];// 添加动画播放的图片for(int i = 0; i<count+1; i++){// 图像名称NSString *imageName = [NSString stringWithFormat:@"%@_%02d.jpg",act,i];
// UIImage *image = [UIImage imageNamed:imageName];// 取出图片的全路径NSBundle *bundele = [NSBundle mainBundle];NSString *path = [bundele pathForResource:imageName ofType:nil];UIImage *image = [UIImage imageWithContentsOfFile:path];[arraym addObject:image];}self.imageView.animationImages = arraym;// 重复一次self.imageView.animationRepeatCount = 1;// 动画时长self.imageView.animationDuration = count * 0.07;// 开始动画[self.imageView startAnimating];// 动画结束,清空动画数组[self.imageView performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.imageView.animationDuration];// 该函数后面还有一个inModes:参数,不删除的话,无效
}- (IBAction)run:(UIButton *)sender {// currentitle 按钮当前的名字[self tomAnimation:sender.tag andAct:sender.currentTitle];
}
2.总结
1.在使用运行中会调用大量的图片文件,如果全都放在Images.xcaddets 文件中会占用大量内存,所以都放在了Support Files中。并且apple禁止将.jpg格式的图片加载在该位置。
2.[self.imageView isAnimating] 对象方法,返回一个BOOL型值,判断一个动画是否在执行。
3. sender.currentTitle:用于取出button的名字。
4. 新建 一个可变的数组,然后将所需的图片名字放到该数组:
// 动画图片数组NSMutableArray *arraym = [NSMutableArray array];// 添加动画播放的图片for(int i = 0; i<count+1; i++){// 图像名称NSString *imageName = [NSString stringWithFormat:@"%@_%02d.jpg",act,i];
// 取出图片的全路径NSBundle *bundele = [NSBundle mainBundle];NSString *path = [bundele pathForResource:imageName ofType:nil];UIImage *image = [UIImage imageWithContentsOfFile:path];[arraym addObject:image];
5.在完成动画之后清空动画指针:
[self.imageView performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:self.imageView.animationDuration];
6.
<span style="white-space:pre"> </span>self.imageView.animationRepeatCount = 1;self.imageView.animationDuration = count * 0.07;
<span style="white-space:pre"> </span>[self.imageView startAnimating];
<span style="white-space:pre"> </span>animationRepeatCount:设置动画循环的次数。
<span style="white-space:pre"> </span>animationDuration:设置动画播放的时长。
<span style="white-space:pre"> </span>startAnimating:开始动画。
(在调试的时候多次出现错误提示:unrecognized selector sent to instance 0x7fbd9ac2bad0 最终发现由于开始时创建的行为未去掉,导致连线存在两个,而是方法中只有一个造成的,删除原来的连线后程序正常运行。)
3.Tom猫的实现(帧动画播放)相关推荐
- cocos2d+lua实现帧动画播放
使用Cocos2d播放帧动画的方法有两种: 先来介绍一下流程: 1.得到动画的每一帧的数组FrameArray 2.将帧动画数组包装成Animation对象 3.将Animation对象转化为可以播放 ...
- CSS 帧动画 播放动画
CSS3 帧动画 amimation @keyframes 在 CSS3 出现之前,动画都是通过 JavaScript 动态的改变元素的样式属性来完成了,这种方式虽然能够实现动画,但是在性能上存在一些 ...
- 自定义ImageView实现播放帧动画
对于帧动画的显示有多种不同的实现方式,帧动画的图片有两种不同的情形,一种是多个单张图片,放在animation-list对应的xml里面,采用轮播的方式进行:另一种是一张大图片排列不同的小图片,之前实 ...
- 【FFH】Canvas实现帧动画及封装(OpenHarmony JS UI)
目录C Demo展示 实现思路 代码封装 canvas绘制图像 动画播放 代码调用 Demo展示 这里以Tom猫(多年前热门的移动端互动小游戏)为例: 实现思路 首先要了解帧动画播放的原理--正如我们 ...
- UGUI 帧动画插件
最近在开发一款功夫猫游戏,本来使用Unity Sprite制作,但是发现Sprite对各种分辨率不支持. 看着游戏很简单就使用UGUI制作,在中途发现有很多帧动画播放,使用了Animation调整使用 ...
- [Android动画] 帧动画-获取帧数( getNumberOfFrames)七
2019独角兽企业重金招聘Python工程师标准>>> [功能说明]该方法用于获取动画的帧个数,也就是按照顺序播放了几张图片.该方法常常用于获取帧动画对象特性的场合. [基本语法]p ...
- 鸿蒙开发-新建Ability与使用image-animator实现图帧动画
场景 鸿蒙开发-基础组件介绍及chart组件使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/118333539 在上面学习了 ...
- 0324的学习笔记----里面最重要的就是一个tom猫的动画,和涉及到的内存问题(创建imageview的两种方式,imagenamed就会形成缓存,占用很多内
还是可以自己对着视频,或者自己有空的时候在做一遍,把按钮做全面的,比较有意思. 看视频的时间是:2015.11.2日上午. 0324: 01-作业-QQ登陆界面 (1) 键盘的退出:[self.vie ...
- 【iOS开发-45】Tom猫案例:动画、imageNamed与imageWithContentOfFile对内存影响、图片文件夹放哪儿以及文档注释
今天tom猫案例效果: (1)最傻最笨的办法: --所有的点击都是按钮,只不过有6个有图标的按钮,有些头部.左右脚.肚子.尾巴那块也是一个按钮,只不过没背景没文字没边框的按钮用户按不到而已. --这里 ...
- Android 帧动画何时停止播放
为什么80%的码农都做不了架构师?>>> 关于android帧动画没有提供结束播放的接口回调表示不理解,也许是基于播放动画的时候,系统在干其他事情,无法确切地保证动画在tota ...
最新文章
- ORA-01109:数据库无法启动问题
- App设计灵感之十二组精美的音乐播放器App设计案例
- [html] 写html代码时,如果缺少了结束标签,你如何检测及如何预防?
- MySQL闪回原理与实战
- Linux内核分析-week 1
- [转载] Python程序将十进制转换为二进制,八进制和十六进制
- 某大学校园网设计方案大学校园拓扑图 全解
- 效度不达标的处理方式
- 结巴分词 java_Java版结巴分词自定义词库
- python与人工智能:KNN近邻法识别手写数字
- 大学计算机课程ppt,北京大学计算机基础课程-PPT课件
- 三年白干!程序员因违反《竞业协议》赔偿腾讯 97.6 万元,返还 15.8 万元
- 剑指Offer——腾讯+360+搜狗校招笔试题+知识点总结
- context.getContentResolver().query()详细用法详解
- left join和right join
- 4.2.7-packet-tracer---configure-router-on-a-stick-inter-vlan-routing
- 苹果更新提示:已接入无线局域网却提示需要接入
- 《缠中说禅108课》2:没有庄家,有的只是赢家和输家
- 人脸识别api_使用人脸识别API的人脸识别
- ubuntu16.04+cuda10.1安装opencv-3.3.0