CALayer 詳解(轉載)

原文地址

第一、綜述

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


第三、屬性

  1. 設置背景色
  2. 陰影的偏差值,
  3. 陰影的半徑,
  4. 陰影的顏色,
  5. 陰影的透明度,
  6. 子層的frame值。
  7. 把新的層add到view的層裏。
  8. 設置邊緣寬度
  9. 設置邊緣顏色
代碼如下:

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:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章