第一、綜述
UIView的繼承結構爲:UIResponder:NSObject。可以看出UIView的直接父類爲UIResponder類,.CALayer的繼承結構:NSObject,直接從NSObject繼承,因爲缺少了UIResponder類,由上可見UIResponder是用來響應事件的,也就是說UIView可以響應用戶事件,所以CALayer不能響應任何的用戶事件,UIView是在/System/Library/Frameworks/UIKit.framework中定義的。我們都知道UIKit主要是用來構建用戶界面並且是可以響應事件的。CALayer是在/System/Library/Frameworks/QuartzCore.framework定義的。而且CALayer作爲一個低級的可以承載繪製內容的底層對象出現在該框架中。
第二、UIView 和CALayer的區別
。
蘋果官方文檔:
Core Animation doesn't provide a means for actually displaying layers in a window, they must be hosted by a view. When paired with a view, the view must provide event-handling for the underlying layers, while the layers provide display of the content.
The view system in iOS is built directly on top of Core Animation layers. Every instance of UIView automatically creates an instance of a CALayer class and sets it as the value of the view’s layer property. You can add sublayers to the view’s layer as needed.
On Mac OS X you must configure an NSView instance in such a way that it can host a layer
第三、屬性
代碼如下:CALayer*subLayer=[CALayerlayer];
subLayer.frame=CGRectMake(80,140,100,100);
subLayer.backgroundColor=[UIColorredColor].CGColor;
subLayer.cornerRadius=15;
subLayer.shadowColor=[UIColorblueColor].CGColor;
subLayer.shadowOffset=CGSizeMake(0,2.0);
subLayer.shadowOpacity=1.0;
subLayer.borderColor=[UIColoryellowColor].CGColor;
subLayer.borderWidth=3.0;
[self.view.layeraddSublayer:subLayer];
截圖:
第三、. masksToBounds : 很重要的屬性,可以用此屬性來防止子元素大小溢出父元素,如若防止溢出,設爲 true
CALayer*subLayer=[CALayerlayer];
subLayer.frame=CGRectMake(80,140,100,100);
subLayer.cornerRadius=15;
subLayer.shadowColor=[UIColorblueColor].CGColor;
subLayer.shadowOffset=CGSizeMake(0,2.0);
subLayer.shadowOpacity=1.0;
subLayer.borderColor=[UIColoryellowColor].CGColor;
subLayer.borderWidth=3.0;
subLayer.contents=(id)[UIImageimageNamed:@"sample.jpg"].CGImage;
subLayer.masksToBounds=YES;
[self.view.layeraddSublayer:subLayer];
result: