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

sublayer2は、sublayer1の長方形の中央に小さな50X50の長方形を描画しますが、この線がコメントアウトされている場合は150X150の長方形を描画します。

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

1 に答える 1

1

sch の「ガイド」を読んだ後、この動作は次の理由によるものだと思います。

1 ガイドに記載されているとおり

境界の四角形は、ビュー独自のローカル座標系で表されます。この四角形のデフォルトの原点は (0, 0) で、そのサイズはフレーム四角形のサイズと一致します。// そして、これが境界の本当の意味です!

... ... ...

境界プロパティのサイズを設定すると、フレーム プロパティのサイズ値が変更され、境界四角形の新しいサイズに一致します。

... ... ...

だから実行するとき

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

フレームのサイズは自動的に 50X50 に変更されます。

ここで CGRectMake(0, 0,..) "0,0" は、何の効果もないため、任意の値にすることができます。

2 anchorPoint を変更しなかったため、デフォルトで anchorPoint は (0.5,0.5) であり、対応する位置は (95,95) であるため、最終的に中心が (95,95) である 5X5 の長方形を描画します。

私が間違っている場合は修正してください

于 2012-04-28T14:45:36.537 に答える