Loading

IOS:个人笔记|UI__用frame,bounds改变控件大小和位置,以及他们之间的区别

  看的是15年之前的教学视频,外加前辈们写的文章。自己随手记录一些知识点,不定时修改或者补充。

           

手写控件的步骤
1:用相应的控件类,创建该类的对象
2:设置该对象的基本属性,例如frame
3:将其添加到对应想要添加的视图中
4:如果是点击类控件,根据自身需求添加对应的事件


1.frame、center和bounds属性
frame:控制位置和大小
center:控制位置(中心点)
bounds:控制大小(以自己的左上角为原点)
2.注意点
(1)通过以下属性可以修改控件的位置
frame.origin
center
(2)通过以下属性可以修改控件的尺寸
frame.size
bounds.size
实际的使用中,由于oc的语法限制,不能直接修对象中改结构体中的值。一般是创建一个新的临时结构体对象,把对象的结构体属性赋值给一个临时的结构体。然后修改临时结构体里的变量,然后再把对象赋值给对象

 1     //用center修改中心点的位置
 2         CGPoint tempCenter=btn1.center;
 3         tempCenter.x=50;
 4         tempCenter.y=50;
 5         btn1.center=tempCenter;
 6         //用bounds修改尺寸大小(为啥没用bounds修改位置请看frame和bounds的差异)
 7         CGRect tempBounds=btn1.bounds;
 8         tempBounds.size.width=61;
 9         tempBounds.size.height=61;
10         btn1.bounds=tempBounds;
11         //frame修改大小和位置
12         CGRect tempHW=btn1.frame;
13         tempHW.size.width=61;
14         tempHW.size.width=61;
15         tempHW.origin.x=88;
16         tempHW.origin.y=89;
17         btn1.frame=tempHW;

说到这里,就必须提到关于frame与bounds的一些差异

frame和bounds是每个view都有的属性,frame必须得设置,不设置,看不见控件。bounds可以不设置

更改frame中位置,当前视图的位置会发生变化。更改frame大小,则当前视图以自身左上角的点为基准进行修改。

更改bounds大小,当前视图中心点不变,大小发生改变。改变位置时,是改变了自身的坐标系原点,本来是自身的左上角,这样一来变化的是子视图的位置

下面来实验下改变bounds的大小和位置。先设置两个VIEW

1    UIView   *firstView=[[UIView alloc]init];
2     firstView.frame=CGRectMake(100100100100);
3     firstView.backgroundColor=[UIColor yellowColor];
4     [self.view addSubview:firstView];
5     
6     UIView   *secondView=[[UIView alloc]init];
7     secondView.frame=CGRectMake(2003030);
8     secondView.backgroundColor=[UIColor redColor];
9     [firstView addSubview: secondView];

 

改变黄颜色View 的大小

 1 UIView   *firstView=[[UIView alloc]init];
 2     firstView.frame=CGRectMake(100100100100);
 3     firstView.backgroundColor=[UIColor yellowColor];
 4     [self.view addSubview:firstView];
 5     
 6     UIView   *secondView=[[UIView alloc]init];
 7     secondView.frame=CGRectMake(2003030);
 8     secondView.backgroundColor=[UIColor redColor];
 9     [firstView addSubview: secondView];
10     
11     CGRect temp=firstView.bounds;
12     temp.size.height=150;
13     temp.size.width=150;
14     firstView.bounds=temp;

 

 

 

 可以看的到黄颜色方块的大小发生变化,但是中心点没变。

接下来通过改变黄色方块的bounds的位置

 1 UIView   *firstView=[[UIView alloc]init];
 2     firstView.frame=CGRectMake(100100100100);
 3     firstView.backgroundColor=[UIColor yellowColor];
 4     [self.view addSubview:firstView];
 5     
 6     UIView   *secondView=[[UIView alloc]init];
 7     secondView.frame=CGRectMake(2003030);
 8     secondView.backgroundColor=[UIColor redColor];
 9     [firstView addSubview: secondView];
10     
11     CGRect temp=firstView.bounds;
12     temp.size.height=150;
13     temp.size.width=150;
14     firstView.bounds=temp;
15     
16     CGRect temp2=firstView.bounds;
17     temp2.origin.x=20;
18     temp2.origin.y=20;
19     firstView.bounds=temp2;

 

 

 

 可以看到改变了黄色View的位置,但是黄色View的位置没变化,可以通过黄色View的Y轴往距时间的间隙对比。发生变化的是上面子对象红色方块的位置。所以说改变的黄色方块bounds的位置,变化的是自身坐标点,随即而来自身子对象的位置发生变化

posted @ 2020-09-14 16:26  DDD-SagerKing  阅读(387)  评论(0编辑  收藏  举报