一、刚才我们给大家实现了一个动画, 1.这个动画的思路就是, 1)为图片框设置一系列的图片, 2)告诉这个动画要持续多长时间, 3)告诉图片框动画重复的次数, 4)启动这个动画, 然后,图片框内部,会把这一系列的图片,自己内部做一个切换吧, 2.我们再来实现一个动画,这个动画是让汤姆猫放屁,英文叫fart,这个动画, 这个动画,大概是00-27张图片,组成的, 3.再拽一个按钮过来,这个按钮的文字去掉,image属性给个fart, 4.我们再来个敲头吧,一点汤姆猫的头,它就晕了, 拖一个按钮,调整大小,整好把汤姆猫的头盖住,把文字去掉, 第一个fart按钮,起名叫fart, 第二个knockout按钮,起名叫knockout, 然后给这两个按钮拖线,第一个fart按钮,拖线之后,Name参数,给个fart,Connection参数,给个Action,Argument参数,给个None, 第二个knockoout按钮,拖线之后,Name参数,给个knockout,Connection参数,给个Action,Argument参数,给个None, 5.接下来,我们把这两个动画实现一下,实现的思路如下: 1)首先,先把图片加载到一个数组里面, 2)设置UIImageView的animationImages属性为对应的图片集合, 3)设置动画持续时间, 4)设置动画重复次数, 5)启动动画, 6.我们看,fart对应的是哪些图片,是不是fart下划线_加一个对应的数字吧, 循环多少次啊,00-27,循环28次, 大家发现,这些代码,其实可以怎么样啊, 直接拷过来,是不是也行啊, 来,咱们拷过来,看一下哪些地方有变化, //0.动态加载图片到一个NSArray中, NSMutableArray *arrayM = [NSMutableArray array]; for(int i=0;i<81;i++){ //拼接图片名称, NSString *imgName = [NSString stringWithFormat:@“drink_%02d.jpg”,i]; //根据图片名称加载图片, UIImage *imgCat = [UIImage imageNamed:imgName]; //把图片加载到数组中, [arrayM addObject:imgCat]; } 看一下,这个地方变成多少, for(int i=0;i<81;i++){ 00-27,是28次,这儿应该改成28, NSString *imgName = [NSString stringWithFormat:@“drink_%02d.jpg”,i]; 这个地方,还是drink吗,不是了,变成fart, 然后,把这些图片,都加载到这个数组里面, 接下来呢,是不是跟上面的代码也是一样的, //2.设置UIImageView的animationImages属性为对应的图片集合, self.imgViewCat.animationImages = arrayM; //3.动画持续时间, self.imgViewCat.animationDuration = 3; 其实这儿最好写成,多少张图片乘以0.1吧, 为了让它快点儿执行完,就写个3吧, //4.重复次数 self.imgViewCat.animationRepeatCount = 1; //5.启动动画, [self.imgViewCat startAnimating]; 看一下,加载图片, 大家看一下,这个动画,和上面那个动画,这些是不是都是一样的, 唯独就是循环次数不一样, 这儿图片名称不一样, 是不是只有这两个地方不一样啊, 我们看看能用吗,运行,是不是ok了, 6)那么,请问大家,我要实现敲头的动画,是不是可以直接command + C,command + V,拷过来啊, 我们看一下,敲头那个动画,是多少张,00-80,是不是也是81张啊, 这个名称叫做knockout下划线加数字啊, 敲头,是81,for(int i = 0 ; i < 81 ; i++) 然后呢,@“knockout_%02d.jpg”, 是不是只要把这两个地方改一下,代码直接拷过来,直接运行,就ok了吧, 运行一下看看,可以了吧, 我每次点这个敲头的按钮,是不是上一个动画还没完,又开一个新动画啊, 这样的话,就是这么一个效果, 3.那么,大家有没有发现,在我们这个代码里面,动画这个代码,不断的被command + C,command + V, 不断的拷贝, 这个时候怎么样,显然证明这些代码可以封装起来,统一用一个方法来表示啊, 记住,以后你写代码的时候,你发现,有段代码,在不断的command + C,command + V,在不断的复制、粘贴、重用,这个时候,证明你的代码,程序设计肯定有问题, 你说,这个command + C ,command + V,难道不叫代码重用吗, 这个不叫代码重用, 这个叫复制、粘贴, 肯定,100%,你哪儿设计,绝对能把它设计的更好, 所以,啥叫代码重用,继承,那个才叫代码重用呢, 也就是说,你写一个子类,继承自父类,父类中的代码,就不需要再写了,子类其实就可以用了吗, 比如说,你写好了一个模块,然后你把这个模块添加进来以后,那个模块中的所有的功能,直接就可以用了,这个才叫代码重用,不是复制、粘贴代码,那个不叫代码重用 代码重用是指的,类似于继承那样,你代码只写一次,别的地方可以直接拿来用,或者说,把这个代码封装在一个方法里面,别的地方要用的时候,直接调这个方法,或者说,一个模块写好了,别的模块添加进来,就可以直接用这个模块中的功能,这些叫代码重用,你发现代码如果重复写的话,这一定不叫代码重用, 所以说,我们发现,这几个方法里面,只有循环次数,和这个图片名称不一样,其他地方是不是都一样, 所以说,这个时候,我们就可以把这个代码优化一下, 那么,把这些动画,封装到一个方法中, 当你执行不同动画的时候,只要调那个方法,就ok了, 4.把这些动画的代码,封装到一个方法里面, //执行动画的方法, //这个方法就叫做,startAnimating,开始执行动画, - (void)startAnimating{ //但是,这个执行动画,你每次执行的不同动画,是不是里面的循环次数,和它的循环的和那个动画的图片名称,是不是不一样, 所以说,这个地方得怎样,对,传一个参数, 第一个,是动画的什么,执行次数吧, - (void)startAnimating:(int)count 第二个呢,是不是图片的名称,imgName, - (void)startAnimating:(int)count imgName:(NSString *)imgName{ //code;