2015-10-16 239 views
1

我想了解視圖如何響應正在更改的邊界。如果我更改視圖的邊界原點,它是否會相應地更改幀起點?更改視圖邊界會影響框架

例如

UIView *greenView = [[UIView alloc] initWithFrame:CGRectMake(150, 150, 150, 200)]; 
greenView.backgroundColor = [UIColor colorWithRed:0.494 green:0.827 
              blue:0.129 alpha:1]; 
[self.view addSubview:greenView]; 
greenView.bounds = CGRectMake(0, 150, greenView.bounds.size.width, greenView.bounds.size.height); 

這不會改變幀的起源爲(150,300)嗎?運行上面的代碼似乎沒有改變其框架。 (我知道你不打算用界限來改變觀點的位置,這只是一個假設)。

+0

這是一個很好的問題。爲什麼不運行它,設置一個brakpoint並看看? –

+0

謝謝!我已經運行了它,但框架沒有改變,只是想看看我是不是正確地理解了這個概念。 – Smashkon

回答

4

Apple Documentation,這裏有一個視圖的框架,邊界和中心之間的關係:

雖然可以更改 獨立於其他的框架,範圍和中心性,改變一個屬性影響別人在以下幾個方面 :

  • 當您設置的幀屬性,在bounds屬性的大小變化值相匹配的框架矩形的新尺寸。中心屬性中的值
    類似地更改以匹配框架矩形的新中心點
  • 設置中心屬性時,框架中的原點值會相應更改。
  • 當您設置邊界屬性的大小時,frame屬性中的大小值將更改爲與邊界矩形的新大小相匹配。

所以,回答你的問題,改變X,在視圖邊界Y位置應該不會影響幀。大多數情況下邊界以(0,0)開始。將高度或寬度更改爲負值可以使邊界的起點變爲負值。

編輯:回答OP問題 - 不,更改界限的位置不會以任何方式影響框架。由於界限是以視圖自己的座標系統爲參照的,所以在自我座標系統上改變X,Y並不會改變監視座標系統中的位置。

您可以通過使用兩個自定義視圖這樣的嘗試:

UIView* view1 = [[UIView alloc] initWithFrame:CGRectMake(50.0f, 100.0f, 150.0f, 150.0f)]; 
view1.backgroundColor = [UIColor redColor]; 

NSLog(@"view1.bounds = %@", NSStringFromCGRect(view1.bounds)); 
NSLog(@"view1.frame = %@", NSStringFromCGRect(view1.frame)); 

UIView* view2 = [[UIView alloc] initWithFrame:CGRectInset(view1.bounds, 20.0f, 20.0f)]; 
view2.backgroundColor = [UIColor yellowColor]; 

NSLog(@"view2.bounds = %@", NSStringFromCGRect(view2.bounds)); 
NSLog(@"view2.frame = %@", NSStringFromCGRect(view2.frame)); 

NSLog(@"view1.bounds = %@", NSStringFromCGRect(view1.bounds)); 
NSLog(@"view1.frame = %@", NSStringFromCGRect(view1.frame)); 

NSLog(@"view2.bounds = %@", NSStringFromCGRect(view2.bounds)); 
NSLog(@"view2.frame = %@", NSStringFromCGRect(view2.frame)); 

[view1 addSubview:view2]; 

,然後更改綁定像這樣子視圖:

CGRect frame = view2.bounds; 
frame.origin.x += 20.0f; 
frame.origin.y += 20.0f; 
view2.bounds = frame; 

改變邊界不會在所有影響幀。而這兩種觀點看起來一樣在屏幕上:

enter image description hereenter image description here

最後,通過改變父視圖的邊界儘量見下圖:

CGRect frame = view1.bounds; 
frame.origin.x += 20.0f; 
frame.origin.y += 20.0f; 
view1.bounds = frame; 

enter image description here

+0

感謝您的回答,但是如果我將矩形的位置向下移動到其自己的座標系中,它在超視圖座標系中的位置是否也會改變? – Smashkon

+0

旋轉狀態下的視圖怎麼樣? – Alwin

相關問題