1. 程式人生 > 實用技巧 >IOS:個人筆記|UI__frame,bounds

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     CGPointtempCenter=btn1.center;
 3     tempCenter.x=50;
 4     tempCenter.y=50;
 5     btn1.center=tempCenter;
 6     //用bounds修改尺寸大小(為啥沒用bounds修改位置請看frame和bounds的差異)
7 CGRecttempBounds=btn1.bounds; 8 tempBounds.size.width=61; 9 tempBounds.size.height=61; 10 btn1.bounds=tempBounds; 11 //frame修改大小和位置 12 CGRecttempHW=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=[[UIViewalloc]init];
2 firstView.frame=CGRectMake(100,100,100,100);
3 firstView.backgroundColor=[UIColoryellowColor];
4 [self.viewaddSubview:firstView];
5 
6 UIView*secondView=[[UIViewalloc]init];
7 secondView.frame=CGRectMake(20,0,30,30);
8 secondView.backgroundColor=[UIColorredColor];
9 [firstViewaddSubview:secondView];

改變黃顏色View 的大小

 1 UIView*firstView=[[UIViewalloc]init];
 2 firstView.frame=CGRectMake(100,100,100,100);
 3 firstView.backgroundColor=[UIColoryellowColor];
 4 [self.viewaddSubview:firstView];
 5 
 6 UIView*secondView=[[UIViewalloc]init];
 7 secondView.frame=CGRectMake(20,0,30,30);
 8 secondView.backgroundColor=[UIColorredColor];
 9 [firstViewaddSubview:secondView];
10 
11 CGRecttemp=firstView.bounds;
12 temp.size.height=150;
13 temp.size.width=150;
14 firstView.bounds=temp;

可以看的到黃顏色方塊的大小發生變化,但是中心點沒變。

接下來通過改變黃色方塊的bounds的位置

 1 UIView*firstView=[[UIViewalloc]init];
 2 firstView.frame=CGRectMake(100,100,100,100);
 3 firstView.backgroundColor=[UIColoryellowColor];
 4 [self.viewaddSubview:firstView];
 5 
 6 UIView*secondView=[[UIViewalloc]init];
 7 secondView.frame=CGRectMake(20,0,30,30);
 8 secondView.backgroundColor=[UIColorredColor];
 9 [firstViewaddSubview:secondView];
10 
11 CGRecttemp=firstView.bounds;
12 temp.size.height=150;
13 temp.size.width=150;
14 firstView.bounds=temp;
15 
16 CGRecttemp2=firstView.bounds;
17 temp2.origin.x=20;
18 temp2.origin.y=20;
19 firstView.bounds=temp2;

可以看到改變了黃色View的位置,但是黃色View的位置沒變化,可以通過黃色View的Y軸往距時間的間隙對比。發生變化的是上面子物件紅色方塊的位置。所以說改變的黃色方塊bounds的位置,變化的是自身座標點,隨即而來自身子物件的位置發生變化