UIButton状态
按钮属性中: 1.image->button上的小图标
2.background—>背景图片
一般按钮默认长按的时候会变灰色,要切换图片就要改变这一属性
一般对UIButton属性状态进行操作时,如果出现操作后没有相应做出改变,考虑以下的解决方案:
一般默认type中system,最好对属性进行自定义修改时建议最好改成custom(自定义)
1.normal(Default)(普通,未对其进行操作时的状态)(默认)
枚举常量:UIControlStateNormal
2.highlighted(高亮,即点击未松开)
枚举常量:UIControlStateHighlighted
3.disabled(不可点击)
如果在storyboard中的属性列表中的enable选项勾选去掉,或者代码中该button的enable属性设为NO 就是处于disable状态,不可被点击,一般有默认变灰的效果,也可自定义
枚举常量:UIControlStateDisabled
改变位置的两种方式(上下左右移动)
1.改变frame
oc规定语法:
不允许直接修改
对象
的
结构体属性
的成员
允许直接修改
对象
的
结构体
属性
head是一个button
✖️ self.head.frame.origin.y = self.head.frame.origin.y-10;这样写是绝对不可以的
.origin和.y是结构体成员
self.head.frame=☑️结构体属性可以
正确写法
CGRecttempFrame = self.head.frame;
tempFrame.origin.y-= 10;
tempFrame.origin.y-= 10;
self.head.frame= tempFrame;
如果只写上面两句不会实现,因为self.head.frame并没有改变,只是那个中介新开辟的空间改变,结构体赋值存粹只是成员赋值
实现每次点击y轴上进行位移的改变
上下左右其实是类似的,所以要懂得重构
在storyboard中找到最右边属性中的tag属性 自定义tag
- (IBAction)move:(UIButton*)btn
{
// 1.取出原来的属性
CGRect tempF = self.head.frame;
// 2.修改临时属性
CGFloat delta = 10;
switch (btn.tag) {
case10:// 上
tempF.origin.y-= delta;
break;
case20:// 下
tempF.origin.y+= delta;
break;
case30:// 左
tempF.origin.x-= delta;
break;
case40:// 右
tempF.origin.x+= delta;
break;
}
// 3.重新赋值
self.head.frame= tempF;
}
{
// 1.取出原来的属性
CGRect tempF = self.head.frame;
// 2.修改临时属性
CGFloat delta = 10;
switch (btn.tag) {
case10:// 上
tempF.origin.y-= delta;
break;
case20:// 下
tempF.origin.y+= delta;
break;
case30:// 左
tempF.origin.x-= delta;
break;
case40:// 右
tempF.origin.x+= delta;
break;
}
// 3.重新赋值
self.head.frame= tempF;
}
2.移动的另一个方法 改变centercenter是一个point 不需要origin
- (IBAction)move:(UIButton*)btn
{
// 1.取出原来的属性
CGPoint tempCenter = self.head.center;
// 2.修改临时属性
CGFloat delta = 10;
switch (btn.tag) {
case10:// 上
tempCenter.y-= delta;
break;
case20:// 下
tempCenter.y+= delta;
break;
case30:// 左
tempCenter.x-= delta;
break;
case40:// 右
tempCenter.x+= delta;
break;
}
// 3.重新赋值
self.head.center= tempCenter;
}
{
// 1.取出原来的属性
CGPoint tempCenter = self.head.center;
// 2.修改临时属性
CGFloat delta = 10;
switch (btn.tag) {
case10:// 上
tempCenter.y-= delta;
break;
case20:// 下
tempCenter.y+= delta;
break;
case30:// 左
tempCenter.x-= delta;
break;
case40:// 右
tempCenter.x+= delta;
break;
}
// 3.重新赋值
self.head.center= tempCenter;
}
缩放的两种方式
1.改变大小size(放大缩小),改变frame,放大时位置起始点x、y不动
// 1.取出原来的属性
CGRect tempFrame = self.head.frame;
// 2.改变临时属性
tempFrame.size.width+= 20;
tempFrame.size.height+= 20;
// 3.用临时属性覆盖原来的属性
self.head.frame= tempFrame;
CGRect tempFrame = self.head.frame;
// 2.改变临时属性
tempFrame.size.width+= 20;
tempFrame.size.height+= 20;
// 3.用临时属性覆盖原来的属性
self.head.frame= tempFrame;
直接写完这三句如果发现没有实现放大缩小
因为autolayout自动布局,会干扰,把这个不选中,在属性栏第一栏
打印结构题,不能当作对象直接打印,必须转成字符串
NSLog(@“%@”,NSStringFromCGRect( self.head.frame));
2.改变size的另一个方法 bounds 位置都是0,0根本不用改,区别是放大的时候中心点不动
// 1.取出原来的属性
CGRect tempBounds = self.head.bounds;
// 2.改变临时属性
tempBounds.size.width+= 20;
tempBounds.size.height+= 20;
// 3.用临时属性覆盖原来的属性
self.head.bounds= tempBounds;
CGRect tempBounds = self.head.bounds;
// 2.改变临时属性
tempBounds.size.width+= 20;
tempBounds.size.height+= 20;
// 3.用临时属性覆盖原来的属性
self.head.bounds= tempBounds;
通过代码创建按钮
//
一般在这里进行界面的初始化
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"-----viewDidLoad");
{
[super viewDidLoad];
NSLog(@"-----viewDidLoad");
// 1.创建按钮
UIButton *btn = [[UIButton alloc] init];
// 2.添加按钮
[self.view addSubview:btn];
// 3.设置frame
btn.frame = CGRectMake(50, 50, 100, 100);
// 4.设置背景图片
// 4.1.通过文件名加载图片(凡是PNG图片,都不用加拓展名)
UIImage *normal = [UIImage imageNamed:@"btn_01”];
UIButton *btn = [[UIButton alloc] init];
// 2.添加按钮
[self.view addSubview:btn];
// 3.设置frame
btn.frame = CGRectMake(50, 50, 100, 100);
// 4.设置背景图片
// 4.1.通过文件名加载图片(凡是PNG图片,都不用加拓展名)
UIImage *normal = [UIImage imageNamed:@"btn_01”];
// 4.2.设置普通状态下的背景图片
[btn setBackgroundImage:normal forState:UIControlStateNormal];
// 4.3.加载高亮的图片
UIImage *high = [UIImage imageNamed:@"btn_02"];
[btn setBackgroundImage:high forState:UIControlStateHighlighted];
// 5.设置文字,按钮的文字分状态
[btn setTitle:@shishanshan" forState:UIControlStateNormal];
[btn setTitle:@"433" forState:UIControlStateHighlighted];
// 6.设置文字颜色
[btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[btn setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted];
// 7.监听按钮点击,控制器监听按钮,控制器就是self,action控制器的方法,forControlEvents事件枚举
[btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
//8.选择按钮类型,buttonWithType是个枚举,这种系统自带样式不需要设置尺寸
UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeContactAdd];
[btn2 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
btn2.center = CGPointMake(250, 250);//不需要设置尺寸
[self.view addSubview:btn2];
}
viewDidLoad在控制器的view加载完毕后,系统自动调用。
在按钮的不同状态下的改变属性,有这几种常用的,状态是枚举类型
- (void)setTitle:(NSString *)title forState:(UIControlState)state; // default is nil. title is assumed to be single line
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)stateUI_APPEARANCE_SELECTOR; // default if nil. use opaque white
- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)stateUI_APPEARANCE_SELECTOR; // default is nil. use 50% black
- (void)setImage:(UIImage *)image forState:(UIControlState)state; // default is nil. should be same size if different for different states
- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)stateUI_APPEARANCE_SELECTOR; // default is nil
- (void)setAttributedTitle:(NSAttributedString *)title forState:(UIControlState)stateNS_AVAILABLE_IOS(6_0);// default is nil. title is assumed to be single line
- (void)setTitleColor:(UIColor *)color forState:(UIControlState)stateUI_APPEARANCE_SELECTOR; // default if nil. use opaque white
- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)stateUI_APPEARANCE_SELECTOR; // default is nil. use 50% black
- (void)setImage:(UIImage *)image forState:(UIControlState)state; // default is nil. should be same size if different for different states
- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)stateUI_APPEARANCE_SELECTOR; // default is nil
- (void)setAttributedTitle:(NSAttributedString *)title forState:(UIControlState)stateNS_AVAILABLE_IOS(6_0);// default is nil. title is assumed to be single line