2012-04-28 31 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)

请纠正我,如果我错了