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

来源:互联网 发布:手机淘宝账号登录不上 编辑:程序博客网 时间:2024/04/27 21:16

做一个不会说话的汤姆猫,原理其实很简单,只是把连续的帧动画连续起来播放,但是在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 0
原创粉丝点击