关闭

黑马程序员--关于控件平移缩放旋转的总结

109人阅读 评论(0) 收藏 举报
分类:

 frame:只能修改图片的大小、位置

 center:只能修改位置

 bounds:只能修改大小 

 transform:可以实现空间的平移、旋转、缩放

 第一:frame:只能修改图片的大小、位置

首先看下frame的类型为CGRect结构体

@property CGRect frame;
struct CGRect {
  CGPoint origin;
  CGSize size;
};
typedef struct CGRect CGRect;
/* Points. */

struct CGPoint {
  CGFloat x;
  CGFloat y;
};
typedef struct CGPoint CGPoint;

/* Sizes. */

struct CGSize {
  CGFloat width;
  CGFloat height;
};
typedef struct CGSize CGSize;
通过frame修改控件位置、大小需要执行以下操作

1、获取frame

2、修改frame

3、重新赋值

例如:

    //1)通过frame改变大小和位置:frame表示左上角坐标
    {
//    //1)获取frame
//    
//    CGRect originFrame=self.btnIcon.frame;
//    
//    //2)设置
//    switch (sender.tag)
//    {
//        case 10://上
//            originFrame.origin.y -=10;
//            break;
//        
//        case 20://右
//              originFrame.origin.x +=10;
//            break;
//        case 30://下
//              originFrame.origin.y +=10;
//            break;
//        case 40://做
//             originFrame.origin.x -=10;
//            break;
//        default:
//            break;
//    }
//    //3)赋值
//    self.btnIcon.frame=originFrame;
    }
    //通过frame修改控件大小
    //取值
    CGRect  sizeFrame=  self.btnIcon.frame;
    //修改
    sizeFrame.size.height+=10;
    sizeFrame.size.width+=20;
    //重新赋值
    self.btnIcon.frame=sizeFrame;

center:只能修改位置

通过center修改中心点坐标,移动位置:center表示图片中心点坐标
    {
        
    CGPoint centerPoint=self.btnIcon.center;
    
        //2)设置
        switch (sender.tag)
        {
            case 10://上
              centerPoint.y -=10;
                break;
    
            case 20://右
                  centerPoint.x +=10;
                break;
            case 30://下
                  centerPoint.y +=10;
                break;
            case 40://做
                 centerPoint.x -=10;
                break;
            default:
                break;
        }
        //3)赋值
        self.btnIcon.center=centerPoint;
bounds只能改变控件大小
   //通过bounts修改图片大小.虽然bounds也是CGRect类型,但是x,y的值始终为0,所以只能修改大小,不能移动
//    //1) 获取bounts结构体值
//    CGRect originBounts=  self.btnIcon.bounds;
//    //2)修改大小
//    switch (sender.tag) {
//        case 10:
//            originBounts.size.height +=10;
//            originBounts.size.width +=10;
//            break;
//        case 20:
//            originBounts.size.height -=10;
//            originBounts.size.width -=10;
//            break;
//        default:
//            break;
//    }
    //第一种方法:重新赋值(无动画效果)
   // self.btnIcon.bounds=originBounts;
transform:平移、旋转、缩放
基于开始值平移、缩放、旋转,仅能修改一次

    CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty);

    CGAffineTransformMakeRotation(CGFloat angle);

    CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);

基于原来值再修改,可以多次

    CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty)

    CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy)

    CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)


清楚所有的额设置

 view.transform =CGAffineTransformIdentity


    //在原有的基础上平移,仅平移一次
    //self.itn.transform=CGAffineTransformMakeTranslation(0, 40);
    //基于原来值再进行平移
    self.itn.transform=CGAffineTransformTranslate( self.itn.transform, 20, 40);

- (IBAction)scale {
    //基于原有值仅缩放一次
    //CGAffineTransformMakeScale(CGFloat sx, <#CGFloat sy#>)
    //<#CGFloat sx#> :为放大倍数,不变为1.0,放大则大于1.0,缩小为小于1.0
  //  self.itn.transform=CGAffineTransformMakeScale(1.4, 1.6)
    
    //基于现有值缩放
    self.itn.transform=CGAffineTransformScale(self.itn.transform, 1.4, 0.8);
}

- (IBAction)makeRotate {
    //基于开始值仅旋转一次
    //CGAffineTransformMakeRotation(<#CGFloat angle#>)
    //<#CGFloat angle#>:为旋转的弧度
    //M_PI_4:π/4
    //self.itn.transform=CGAffineTransformMakeRotation(M_PI_4);
    //基于现有值旋转
   // self.itn.transform=CGAffineTransformRotate(self.itn.transform, M_PI_4);
    //基于动画的旋转
    
    [UIView animateWithDuration:2.5 animations:^{
    self.itn.transform=CGAffineTransformRotate(self.itn.transform, M_PI_4);
        self.itn.transform=CGAffineTransformScale(self.itn.transform, 1.4, 0.8);
        self.itn.transform=CGAffineTransformTranslate( self.itn.transform, 20, 70);
       
    }];
}









 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3659次
    • 积分:263
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:5篇
    • 译文:0篇
    • 评论:0条