2012-04-28 65 views
3

我感到困惑的CALayer的財產範圍,界限在CALayer中意味着什麼?

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    CALayer *sublayer = [CALayer layer]; 
    sublayer.backgroundColor = [UIColor blueColor].CGColor; 
    sublayer.frame = CGRectMake(18, 18, 154, 154); 
    [self.view.layer addSublayer:sublayer]; 

    CALayer *sublayer2 = [CALayer layer]; 
    sublayer2.backgroundColor = [UIColor redColor].CGColor; 
    sublayer2.frame = CGRectMake(20, 20, 150, 150); 
    sublayer2.bounds = CGRectMake(0, 0, 50, 50); 
    sublayer2.zPosition = 10; 

    [self.view.layer addSublayer:sublayer2]; 
} 

sublayer2畫一個小50X50矩形sublayer1, 的矩形的中心,但它會畫一個150X150的矩形,如果該行被註釋掉:

sublayer2.bounds = CGRectMake(0, 0, 50, 50); 
+0

檢查我回答這個類似[問題](http://stackoverflow.com/q/9752695/1207152)和諮詢蘋果公司的[指南](HTTP://開發商.apple.com /庫/ IOS /文檔/ WindowsViews /概念/ ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html#// apple_ref/DOC/UID/TP40009503-CH2-SW5)。 – sch 2012-04-28 12:53:56

+0

老年人不斷向我們解釋這些事情令人沮喪,但是您確實寫了一段很好的代碼來說明sch的「指南」鏈接中提出的概念。您可以添加代碼重新設置,重新設置邊界,更改中心等,作爲按鈕操作或將日誌顯示在控制檯上,以顯示結果反應 - 這將更好地展示。然後你可以用你的結論添加你自己的答案。 – Wienke 2012-04-28 14:04:18

回答

1

後讀SCH的「指南」,我認爲行爲是由於以下原因:

1爲先導,在文件檔案化

邊界矩形表示在視圖自己的本地座標 系統中。此矩形的默認原點是(0,0),其大小 與框架矩形的大小相匹配。 //這就是界限真正的意思!

... ...

當您設置bounds屬性的大小,在 幀的屬性更改大小值相匹配的邊界矩形的新的大小。

......

所以當執行

sublayer2.bounds = CGRectMake(0, 0, 50, 50); 

幀的大小將變更爲50X50自動,

這裏CGRectMake(0,0,...)「 0,0「可以是任何值,因爲它不會起作用。因爲我們沒有改變anchorPoint,默認情況下anchorPoint是(0.5,0.5),它的對應位置是(95,95),所以最後它會繪製一個5X5的矩形,其中心是(95,95)

請糾正我,如果我錯了