首页 > 代码库 > 开发进阶04_按钮操作

开发进阶04_按钮操作

UIButton:有状态
    1、normal:普通状态(没有触摸的时候)(默认情况下-Default)
    2、highlighted:高亮状态(有触摸的时候)
 
经常会出的错误:
    如果控件和方法或者属性连线了之后,若不需要这个属性和方法,需要将连线也删除
    
 
OC语法规定:不允许直接修改 某个对象中结构体属性的成员
修改按钮位置的步骤:
//设置宏
#define delt 50
 
- (IBAction)btnRun:(id)sender
{
    //0、动画(头部-开始动画)
    [UIView beginAnimations:nil context:nil];
   
    //设置动画的执行时间(0.25秒是默认时间)
    [UIView setAnimationDuration:1.0];
   
    //1、先取出frame
    CGRect tempFrame = self.btnImage.frame;
    //2、取出按钮的tag值
    NSInteger t = [sender tag];
    switch (t) {
        case 1:
            tempFrame.origin.y -= delt;
            break;
        case 2:
            tempFrame.origin.x += delt;
            break;
        case 3:
            tempFrame.origin.y += delt;
            break;
        case 4:
            tempFrame.origin.x -= delt;
            break;
    }
   
    //3、重新赋值按钮的frame
    self.btnImage.frame = tempFrame;
    //4、动画(尾部-提交动画-执行动画)
    [UIView commitAnimations];
}
   
 
OC中宏的定义:
    在#import下面
        #define  名称   值   (值后面千万不能加分号)
        那么在下面的代码中,这个“名称”就代表“值”
    相当于C#中的常量:const  数据类型  名称 = 值;
 
 
旋转度数的定义
    PI:π
    采用的是弧度
    -M_PI_4:表示的是逆时针45°
    M_PI_2:表示的是顺时针90°
 
控制按钮旋转
- (IBAction) Rotate:(id)sender {
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    NSInteger t = [sender tag];
    if(10 == t)
    {
        _btnImage.transform = CGAffineTransformRotate(_btnImage.transform
                                                  , -M_PI_4);
    }else if(11 == t){
        _btnImage.transform = CGAffineTransformRotate(_btnImage.transform
                                                      , +M_PI_4);
    }
   
    [UIView commitAnimations];
}
 
 
放大或缩小:
    - (IBAction)bigOrSmall:(id)sender{
   
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
   
    NSInteger t = [sender tag];
    if(t == 20)
    {
        _btnImage.transform = CGAffineTransformScale(_btnImage.transform, 1.2, 1.2);
    }else if(t == 21){
        _btnImage.transform = CGAffineTransformScale(_btnImage.transform, 0.8, 0.8);
    }
   
    [UIView commitAnimations];
}
 
上面的代码中都是首尾相同的:可以使用block语法
- (void)btnClickWithBlock:(void (^)())block
{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    block();
    [UIView commitAnimations];
}
 
方法中使用:
        [self   btnClickWithBlock:^{
        NSInteger t = [sender tag];
        if(t == 20)
        {
            _btnImage.transform = CGAffineTransformScale(_btnImage.transform, 1.2, 1.2);
        }else if(t == 21){
            _btnImage.transform = CGAffineTransformScale(_btnImage.transform, 0.8, 0.8);
        }
        }];
 
 
重置按钮状态:
CGAffineTransformIdentity:返回的是一个常量,清空按钮的形变
    请求按钮的形变,恢复到原来的状态
- (IBAction)btnReset:(id)sender {   
    [self   btnClickWithBlock:^{
        _btnImage.transform = CGAffineTransformIdentity;
    }];
}
 
移动控件的时候还可以通过center来移动,center是CGPoint类型
 
 
 
State Config:按钮状态
Background:背景图片
 
 
笔记:控件的属性
1、frame    
    -》表示控件的位置和尺寸(以父控件的左上角为坐标原点(0,0))
    -》修改这个属性,可以调整控件的位置和尺寸
    
2、center
    -》表示控件的中心点(以父控件的左上角为坐标原点)
    -》修改这个属性,可以调整控件的位置
 
3、bounds
    -》表示控件的位置和尺寸(以自己的左上角为坐标原点。位置永远都是(0,0))
    -》修改这个属性,只能调整控件的尺寸
 
4、tag
    -》表示控件的标识
    -》通过不同标识可以区分不同的控件
 
5、transform
    -》表示控件的形变状态(旋转角度、缩放比例)
    
     -》创建CGAffineTransform 的函数
    CGAffineTransformMakeScale(CGFloat sx,CGFloat sy);
    创建一个x,y方向的缩放比例分别为sx,sy的形变值
    
    CGAffineTransformMakeRotation(CGFloat angle)
    创建一个旋转角度为angle的形变值
 
    CGAffineTransformScale(CGAffineTransform t ,CGFloat sx,CGFloat sy);
    在形变值t的基础上在进行缩放,x、y方向的缩放比例分别为sx、sy,然后返回一个新的形变值

开发进阶04_按钮操作