[iOS] 经典应用-汤姆猫

    两年前,有这么一款应用相信大家肯定不陌生。那就是iOS 上面的一个经典应用汤姆猫。这玩意简直就是讨女生欢心的神器啊。 当时就觉得,动画效果做的非常完美,并且创意感十足。   而知道我学习了iOS开发,才明白了这个应用的代码,其实一点也不难。好了废话不说,进入正题。

   




这个应用的核心就是序列帧动画,就是利用多幅图像不停的在屏幕上面刷新实现。

   首先就是把资源拖入xcode的资源目录下了。这个没什么好说的,就是跟以前一样。值得注意的是,拖入时候的文件尽量选择png格式。而不要用大众的jpg格式。 因为手机解压缩要消耗大量的内存。 

  首先搭建基本ui界面。  这个汤姆猫的核心就是利用 uiimage定时切换图像,通过按钮来进行控制来实现。  所以,自然离不开uiimage之中关于动画的一些属性。我们打开uiimage的头文件看一看


第一个和第二个数组都是用来存放动画使用的图片。区别是第二个是高亮状态。第三个是动画播放一轮所需要的时间。默认状态是每秒30张(好快啊。。。)。第四个是动画播放次数,如果是零的话就一直播放下去。下面的 startAnimating,stopAnimating,isAnimating自然不必多说:开始动画,停止动画,正在动画状态。


下面就是编写代码了。核心代码如下:

- (void)tomAnimation:(NSString *)img count:(int)count

{

    // 0.如果正在动画,直接返回

   if ([self.tomisAnimating])return;

    

    //序列帧动画,所谓序列帧动画,就是让一组图片一张一张的顺序播放

    // 1. 图片的数组

    NSMutableArray *arrayM = [NSMutableArrayarray];

   for (int i =0; i < count; i++) {

       NSString *imageName = [NSStringstringWithFormat:@"%@_%02d.jpg", img, i];

//        UIImage *image = [UIImage imageNamed:imageName];

       NSString *path = [[NSBundlemainBundle]pathForResource:imageNameofType:nil];

       UIImage *image = [UIImageimageWithContentsOfFile:path];

        

        [arrayMaddObject:image];

    }

    [self.tomsetAnimationImages:arrayM];

    

    // 2. 设置动画时长

    [self.tomsetAnimationDuration:arrayM.count *0.075];

    [self.tomsetAnimationRepeatCount:1];

    

    // 3. 开始动画

    [self.tomstartAnimating];

    

    // 4.动画完成之后,再清除动画数组内容


    [self.tomperformSelector:@selector(setAnimationImages:)withObject:nilafterDelay:self.tom.animationDuration];

}




特地说明一点,这里对于图像的加载不采用 UIImage *image =[UIImage imageNamed :imageName];这种方法。因为图片使用完毕后,不会直接被释放,具体释放时机由系统决定。这种方式适合于小图片的显示。而不适合动画这种多图显示。小生曾经真机亲测这种方式,内存瞬间飙到 500多m。这显然是不可行的。所以在文中采用路径的方法来进行图像的导入。在动画完成之后,手动清除动画数组内容。

还有,文中使用的%2d表示的使两位数,不足两位用0补齐。并且ios不允许资源图片重名。这没有为什么,就是这样规定的。个人感觉总是得改名字很痛苦啊。这个多啰嗦一句吧。

如果非要使用重名的图片,那只能在导入文件的时候,选择这个选项,把他放到supporting files 里面。在获取文件的时候采用层层遍历的方式,但是小生感觉这会牺牲一定效率。一般,只要在游戏公司会使用这种方式,因为做游戏要涉及到的图片实在是太多了。平时在做一般的应用开发时候,由于图片没有那么多所以不会采取这种方式



下的步骤,就是依次tom猫的身体上面插入不同的按钮和编写不同的动画啦。个人感觉还是非常简单的。如果加入音频文件,后续可以做的更有意思。



通过这个小的Demo告诉我们,做app应用,其实有的时候创意才是最重要的,而技术只是实现创意的手段。






 

   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值