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




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值