目的: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 最终发现由于开始时创建的行为未去掉,导致连线存在两个,而是方法中只有一个造成的,删除原来的连线后程序正常运行。)