【问题标题】:what does bounds really mean in CALayer?CALayer 中边界的真正含义是什么?
【发布时间】:2012-05-08 23:09:03
【问题描述】:

我对 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);

【问题讨论】:

  • 查看我对类似question 的回答并咨询Apple 的guide
  • 前辈们不断向我们解释这些事情令人沮丧,但您确实编写了一段很好的代码来说明 sch 的“指南”链接中提出的概念。您可以将代码添加到重构、重置边界、更改中心等,作为按钮操作或将日志添加到控制台以显示生成的矩形——这将是一个更好的说明。然后,您可以在结论中添加您自己的答案。

标签: xcode calayer


【解决方案1】:

看了sch的“指南”后,我认为这种行为是由于以下原因:

指南中提到的1

边界矩形以视图自身的局部坐标表示 系统。这个矩形的默认原点是 (0, 0) 和它的大小 匹配框架矩形的大小。 //这就是bounds的真正含义!

... ...

设置bounds属性的大小时, frame 属性更改以匹配边界矩形的新大小。

... ...

所以当执行时

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)

如有错误请指正

【讨论】:

    猜你喜欢
    • 2013-02-02
    • 2017-05-06
    • 2012-03-30
    • 2011-10-10
    • 2012-08-03
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多