UIView的属性层不是readonly吗?

时间:2012-10-11 10:05:24

标签: iphone ios transform layer

UIView的属性层在Apple的文档中描述如下:

视图的Core Animation层用于渲染。 (只读)

@property(nonatomic, readonly, retain) CALayer *layer

显然它是只读的。但在我的项目中,为什么可以设置如下:

NSLog(@"before: %f",self.myView.laye.frame.size.width);
[self.myView.layer setAffineTransform:CGAffineTransformMakeScale(2, 2)];
NSLog(@"after: %f",self.myView.laye.frame.size.width);
//log shows us that the frame is modified 

在这种情况下真的很困惑。有人可以帮帮我吗?提前谢谢!

2 个答案:

答案 0 :(得分:4)

layer属性是只读的,这意味着您无法更改另一个属性的层,但属性中包含的CALayer对象不是不可变的,您可以设置自己的属性。

你做不到:

self.myView.layer = newLayer;
// equivalent to [self.myView setLayer:newLayer];

但你可以这样做:

[self.myView.layer setAffineTransform:CGAffineTransformMakeScale(2, 2)];

它是您无法使用的setLayer:选择器。

答案 1 :(得分:1)

CALayer不是UIKit的一部分。它是Quartz Core框架的一部分

UIView类是UIKit的一部分。您可以阅读两者的文档以了解差异

UIView继承自NSObject,CALayer也从NSObject继承,所以当时你正在做:[self.myView.layer setAffineTransform:CGAffineTransformMakeScale(2,2)];

您没有分配图层,而是直接访问CALayer类图层属性,因此您可以使用图层的位置,大小和变换,如CALayer中所示。文档,它允许所有这些事情