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),它的大小与框架矩形的大小相匹配。//这就是界限的真正含义!

……

当您设置 bounds 属性的大小时,frame 属性中的 size 值会更改以匹配边界矩形的新大小。

……

所以当执行

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

框架的大小将自动更改为 50X50,

这里 CGRectMake(0, 0,..) "0,0" 可以是任何值,因为它不会起任何作用。

2 因为我们没有改变anchorPoint,默认anchorPoint是(0.5,0.5),它对应的位置是(95,95),所以最后会画一个5X5的矩形,中心是(95,95)

如果我错了,请纠正我

于 2012-04-28T14:45:36.537 回答