一、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
原文地址:https://blog.csdn.net/madoca/article/details/128539791
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_44564.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。