2012-10-11 89 views
1

的UIView的特性層在蘋果的文檔被描述爲以下:UIView的屬性層是不是隻讀?

視圖的核心動畫層用於渲染。 (只讀)

@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 

真的很困惑在這種情況下。任何人都可以幫助我?提前致謝!

+0

讚美主:) –

回答

4

layer屬性是隻讀的,這意味着你不能改變圖層爲另一個,但屬性中包含的CALayer對象不是不可變的,你可以設置它自己的屬性。

你不能做:

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

但你可以這麼做:

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

這是setLayer:選擇,你不能使用。

1

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

UIView類是UIKit的一部分。您可以閱讀兩者的文檔以瞭解差異

UIView繼承自NSObject,並且CALayer也從NSObject繼承,因此您正在執行此操作:[self.myView.layer setAffineTransform:CGAffineTransformMakeScale(2,2)];

您不分配圖層,實際上您直接訪問CALayer類圖層屬性,因此您可以使用圖層的位置,大小和轉換進行操作,正如您在CALayer文檔中所看到的,它允許所有這些操作

+0

thx爲您的答案,但它似乎不是重點。 –

+0

Quartzcore是一個核心級別的框架,但UIkit僅作爲IOS的更高級別框架構建,因此使用Quartzcore CALayer可以訪問視圖圖層的屬性。還有什麼懷疑我的朋友? – Bhupendra