一、UIButton的状态

1.normal(普通状态)

默认情况(Default)

对应的枚举常量:UIControlStateNormal

2.highlighted(高亮状态)

按钮被按下去的时候(手指还未松开)

对应的枚举常量:UIControlStateHighlighted

3.disabled(失效状态,不可用状态)

如果enabled属性为NO,就是处于disable状态,代表按钮不可以被点击

对应的枚举常量:UIControlStateDisabled

二、实现简单的动画

1.首先,把上一篇文章的图片按钮放大、缩小的代码,数值改大一点儿,上次是+10,这次改成+100

if(sender.tag == 100){

originBounds.size.width += 100;

originBounds.size.height += 100;

}else if(sender.tag == 200){

originBounds.size.width -= 100;

originBounds.size.height -= 100;

}

2.然后,把修改图片按钮位置的代码的数值,也改大一点儿,上次是+10,这次改成+100

switch(sender.tag){

case 10:

//上

centerPoint.y -= 100;

break;

case 20:

//右

centerPoint.x += 100;

break;

case 30:

//下

centerPoint.y += 100;

break;

case 40:

//左

centerPoint.x -= 100;

break;

}

这样的话,每次移动的时候,缩放的时候,这个值,是不是都比较大

是不是都100吧

运行,向下移动一下,是不是看着很生硬

我们希望它这个,无论是移动位置,还是放大缩小,都带一定的动画效果

通过1个动画来实现

怎么来给它增加动画呢

两种方式

接下来,就给大家介绍两种增加动画的方式

同样是1个移动位置,同样是1个改变大小

我们通过动画的方式来实现

通过动画来实现,我们有两种方式:

3.比如说,我们移动的时候,希望它在移动的时候,增加动画,

移动的时候,第一步,

获取原始的值

不论是通过frame,还是这个center

都是1个效果啊

第二步,修改

注意,在第三步,重新赋值的时候,把这句话,放到动画里面,就OK了

self.btnIcon.center = centerPoint;

明白,只要把这句话,放到动画里面,就OK了

这是没有动画的方式

没有动画,直接执行

self.btnIcon.center = centerPoint;

下面是通过动画的方式来执行

怎么通过动画的方式来执行呢

动画有这么几步:

1)开启一个动画

2)设置动画执行时间

3)提交动画

好,怎么开启1个动画呢

我们开启1个动画,是调的UIView的方法

调的UIView的1个类方法

我们开启1个动画,不是说,你要让它执行1个动画,去调它的1个方法,不是

无论你是要给谁执行1个动画,都是调UIView,是不是所有控件的祖宗类,都是调UIView里面有一个类方法

[UIView begin…

输入这个,begin,看了吗

有一个beginAnimations:(NSString *) context:(void *)

这个方法的返回值,是void类型的

这个方法的签名如下:

void beginAnimations:(NSString *) context:(void *)

beginAnimations,是开启1个动画

然后,这两个参数,你可以先传1个nil

[UIView beginAnimations:nil context:nil];

这是开启1个动画

第二步:设置动画执行时间

[UIView set…

输入这个之后,有一个

[UIView setAnimationDuration:(NSTimeInterval)]

这个方法的签名如下:

void setAnimationDuration:(NSTimeInterval)

这是设置动画的执行时间

这个参数,NSTimeInterval,

给1个2,

代表2秒钟

第三步:提交动画

[UIView commitAnimations];

注意,在你开启1个动画,设置完动画的执行时间以后,把你要执行动画的代码,放到这个中间,比如

//1.开启1个动画

[UIView beginAnimations:nil context:nil];

//2.设置动画的执行时间

[UIView setAnimationDuration:2];

self.btnIcon.center = centerPoint;

//3.提交动画

[UIView commitAnimations];

1)开启1个动画

2)设置动画的执行时间

中间是要执行动画的代码

3)最后,提交这个动画

我们是在移动图片按钮的方法里,给它加的动画吧

我们之前,没有动画的方式,是不是就是1句啊

self.btnIcon.center = centerPoint;

有动画的方式,就是把

1)开启动画

[UIView beginAnimations:nil context:nil];

2)设置动画执行时间

[UIView setAnimationDuration:2];

放到这句代码前面

self.btnIcon.center = centerPoint;

在它后面,再放1句提交动画的代码

3)提交动画

[UIView commitAnimations];

这是我们第一种开启动画的方式

就这么三步:

1)开启1个动画

[UIView beginAnimations:nil context:nil];

2)设置动画执行时间

[UIView setAnimationDuration:2];

3)提交动画

[UIView commitAnimations];

把你要设置动画的代码放在第2步和第3步之间

这就是开启动画的第1种方式

3.接下来,想在放大、缩小时,也有动画,怎么办

是不是在这个放大、缩小方法里面

- (IBAction)scale:(UIButton *)sender;

1)获取原始的bounds

CGRect originBounds = self.btnIcon.bounds;

2)修改bounds

if(sender.tag == 100){

originBounds.size.width += 100;

originBounds.size.height += 100;

}else if(sender.tag == 200){

originBounds.size.width -= 100;

originBounds.size.height -= 100;

}

3)重新赋值bounds

self.btnIcon.bounds = originBounds;

这句话,现在有动画吗,没有

怎么把它放动画里面

//通过动画实现放大、缩小

是不是还是3步啊:

1)开启1个动画

[UIView beginAnimations:nil context:nil];

2)设置动画时长

[UIView setAnimationDuration:2];

3)提交动画

[UIView commitAnimations];

把要指定动画的代码放到第3步前面:

self.btnIcon.bounds = originBounds;

我们这里,发现动画效果是,图片按钮放大了之后,又回去,所以,我们这里不要用bounds,用frame

这种开启动画的方式,叫做“头尾式”

//通过frame修改大小

CGRect originFrame = self.btnIcon.frame;

if(sender.tag == 100){

originFrame.size.width += 100;

originFrame.size.height += 100;

}else if(sender.tag == 200){

originFrame.size = CGSizeMake(originFrame.size.width - 100,originFrame.size.height - 100);

}

[UIView beginAnimations:nil context:nil];

[UIView setAnimationDuration:1];

self.btnIcon.frame = originFrame;

[UIView commitAnimations];

运行一下,这回图片按钮可以正常放大缩小了吧

好了,以上是“头尾式”开启动画方式

下面介绍“Block方式”开启动画方式

二、Block方式开启动画方式

1.怎么用Block方式,开启1个动画呢

我们先从放大、缩小,开始

我们还是回到原来,通过frame方式改变大小

//通过frame修改大小

CGRect originFrame = self.btnIcon.frame;

if(sender.tag == 100){

originFrame.size.width += 100;

originFrame.size.height += 100;

}else if(sender.tag == 200){

originFrame.size = CGSizeMake(originFrame.size.width - 100,originFrame.size.height - 100);

}

self.btnIcon.frame = originFrame;

然后,我们这句话,在动画里面吗,不在

self.btnIcon.frame = originFrame;

2.通过block方式,实现动画

[UIView animateWithDuration:(NSTimeInterval) animations:^(void)animations];

第一个参数:(NSTimeInterval)是持续时间

这个动画,持续1秒钟,或1.0秒,都OK

第二个参数:^(void)animations

当焦点移动到第二个参数的时候,直接回车

这时候,Xcode会自动生成这个block

[UIView animateWithDuration:1.0 animations:^{

code;

}];

然后,中间写的代码,你猜也能猜到是什么,

是不是要执行动画的代码啊

[UIView animateWithDuration:1.0 animations:^{

//执行动画的代码

self.btnIcon.frame = originFrame;

}];

这个是block方式来执行这个动画,

是不是一句话就搞定了啊

如果是你的话,你是用block方式来开启动画呢,还是用“头尾式”啊,

肯定是block式吧

3.刚才移动图片按钮的动画,也可以通过block方式来实现

这个使用block怎么实现

是不是也是一样的,来,说一下吧,怎么写

[UIView animateWithDuration:1.0 animations:^{

self.btnIcon.center = centerPoint;

}];

运行一下,试试,能实现动画了吧

好了,以上就是Objective-C里面的动画介绍

一种是“头尾式”,3步

beginAnimations

setAnimationDuration

commitAnimations

另一种是block式,1句话

[UIView animateWithDuration:1.0 animations:^{

//需要指定动画的代码

}];

两种动画的方式

好,这个没问题吧,

通过以下属性可以修改控件的位置

frame.origin

center

通过以下属性可以修改控件的尺寸

frame.size

bounds.size

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: