【成长记录】iOS小程序-不会说话的汤姆猫

做一个不会说话的汤姆猫,原理其实很简单,只是把连续的帧动画连续起来播放,但是在Xcode中实现起来很简单,不像是安卓那么复杂,只是Xcode中的方法封装的很实用很简单。

先看看,慢慢说起来~~~

其实主界面只是一个UIImageView 



把这个View直接填充一个帧,这里填充的事angry动画的第一个帧,其实后面的方法中并没有实现这个方法


再来些按钮加上去,其实在脑袋上还有个按钮,一个很大的按钮,就是用来点击然后让他晕倒的一个按钮,只是没有背景,是个透明的空按钮(真正的tom猫不是这样的,这个很低端~~~)



下面毫无疑问咯,就是各种图片资源,这里要注意一个问题,把按钮的图片资源放在images.xcassets中是可以在资源中看到的,但是把这Animations中图片放入到images中是不行的,因为在images这个文件夹中,苹果是不支持jpg的,所以按钮的png文件是可以识别的,所以把Animations放在了Supporting Files中就OK咯~


代码来了~~~~

#import "ViewController.h"

@interface ViewController ()
//设置动作方法
-(IBAction)drink;
-(IBAction)eat;
-(IBAction)pie;
-(IBAction)knock;
-(IBAction)fart;
-(IBAction)scratch;
-(IBAction)cymbal;
//设置小猫控件
@property(weak,nonatomic) IBOutlet UIImageView *TOM;

@end

@implementation ViewController
//直接设置公共调用动画方法
//两个参数
    //1,动画张数
    //2,动画名称
-(void)runAnimationWithCount:(int)count name:(NSString *)name{
    //设置静态下的状态,不能重复
    if(self.TOM.isAnimating) return;
    //1,加载图片
    NSMutableArray *images = [NSMutableArray array];
    for (int i = 0; i<count; i++) {
        NSString *filename = [NSString stringWithFormat:@"%@_%02d.jpg",name,i];
        NSBundle *bundle = [NSBundle mainBundle];
        NSString *path = [bundle pathForResource:filename ofType:nil];
        UIImage *image = [UIImage imageWithContentsOfFile:path];
        //添加图片到数组中
        [images addObject:image];
        
    }
    self.TOM.animationImages = images;
    //2.设置播放次数
    self.TOM.animationRepeatCount = 1;
    //3,设置播放时间
        //用张数来控制时间
    self.TOM.animationDuration = count*0.05;
    //设置完毕才开始动画
    [self.TOM startAnimating];
    //清空内存
    CGFloat delay = self.TOM.animationDuration +1;
    [self performSelector:@selector(chearCache) withObject:nil afterDelay:delay];
}

-(void)chearCache{
    NSLog(@"清空缓存");
}


-(IBAction)drink{
    [self runAnimationWithCount:81 name:@"drink"];
}
-(IBAction)eat{
    [self runAnimationWithCount:40 name:@"eat"];
}-(IBAction)cymbal{
    [self runAnimationWithCount:13 name:@"cymbal"];
}-(IBAction)fart{
    [self runAnimationWithCount:28 name:@"fart"];
}-(IBAction)pie{
    [self runAnimationWithCount:24 name:@"pie"];
}-(IBAction)scratch{
    [self runAnimationWithCount:56 name:@"scratch"];
}-(IBAction)knock{
    [self runAnimationWithCount:81 name:@"knockout"];
}
@end

以上的就是实现着7个动作,包括按钮的6个,和敲击脑袋的动作

在这个项目中所学到的东西:

1.将动画播放的代码放在一个方法中,用动画的名字和张数作为参数来控制播放哪一个动画

2.在动画开始之后直接清空内存不需要调用startAnimaction方法

3.清空内存的方式,直接调用setAnimaction,直接清空 = nil


这样直接在完成动画后调用这个方法,下面这种情况就是为了测试performselector的方法,直接清空内存,在播放动画之后一秒之后,然后直接把setAnimactionImages放在chearCache的位置


不过需要调用有些不同,上面调用方法直接把cheraCache扔进去就是了,但是如果直接把setAnimationImages扔进去就会报错,因为,前者的方法是自定义的,而后者的方法是需要继承定义TOM的UIimageView的方法



4,在这样一个小程序中,初步进入ios开发,还没有考虑到个中文件问题,所以在这里第一次接触到了内存的清空,在一次动画过程中,系统将所有当前动画的文件调用进去,就会造成内存飙升,然后再次调用其他的动画方法的时候,就导致,文件继续调用进去,之前的动画方法并没有清空,所以这个思路还是很简单的,在调用一个动画方法后+1秒直接清空,效果如下

运行eat的内存,是223.7MB


运行完成之后的内存,是20.9MB,这个大小几乎就是等于我们所看到的文件总和了







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值