UIKit---UIButton状态,平移,缩放,代码方式动态添加控件

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;
     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;
}

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.改变大小size(放大缩小),改变frame,放大时位置起始点x、y不动
    // 1.取出原来的属性
   
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;


通过代码创建按钮

// 一般在这里进行界面的初始化
- (void)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];

    // 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



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值