2012-04-28 15 views
3

私は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]; 
} 

は、sublayer1の長方形の中心にある小さな50×50の長方形を描き が、この行をコメントアウトされている場合、それは150X150の四角形を描画しますsublayer2、のCALayerのプロパティ境界について混乱していた:

読み取りSCHの「ガイド」の後
sublayer2.bounds = CGRectMake(0, 0, 50, 50); 
+0

この同様の[質問](http://stackoverflow.com/q/9752695/1207152)に私の答えをチェックして、Appleの[ガイド](HTTP相談私を修正してください://開発者を.apple.com/library/ios/DOCUMENTATION/WindowsViews/Conceptual/ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html#// apple_ref/doc/uid/TP40009503-CH2-SW5)。 – sch

+0

高齢者がこれらのことを私たちに説明し続けるのはイライラしていますが、実際にはschの "guide"リンクに示されている概念を説明する素晴らしいコードを書いています。再表示、境界のリセット、センター変更などのコードをボタンアクションとして、コンソールでログに出力して、結果として生じる矩形を表示することができます。それであなたは自分の結論をあなた自身の答えに加えることができます。 – Wienke

答えて

1

、私は行動には、以下の理由によるものであると思う:ガイドにmetionedよう

境界矩形は、ビューのローカル座標 システムで表されます。この矩形のデフォルトの原点は(0、0)で、そのサイズは で、フレーム矩形のサイズに一致します。 //これは境界が本当に意味するものです!

... ...

あなたはboundsプロパティのサイズを設定すると、 フレームプロパティの変更でサイズの値は、境界の矩形の新しいサイズに合わせて。

... ...

実行したときにそう

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

フレームのサイズは、「ここに、自動的に50×50にCGRectMake(0、0、..)を

を変更します0,0 "は何の影響も受けないため、任意の値にすることができます。

2 anchorPointはデフォルトでanchorPointが(0.5,0.5)であり、対応する位置が(95,95)であるため、最後に(95,95)を中心とする5X5矩形を描画します。

私が間違っている場合

関連する問題