1. 程式人生 > >CALayer的屬性、介面總結

CALayer的屬性、介面總結

1、建立與初始化layer相關

+ (instancetype)layer;//建立並初始化一個layer

- (instancetype)initWithLayer:(id)layer;//通過一個layer建立一個副本

2、渲染層layer與模型層layer

- (nullable id)presentationLayer;//渲染層layer

- (id)modelLayer;//模型層layer

對於presentationLayer,這個屬性不一定總會返回一個實體物件,只有當進行動畫或者其他渲染的操作時,這個屬性會返回一個在當前螢幕上的layer,並且每一次執行,這個物件都會不同。

對於modelLayer,它會返回當前的儲存資訊的Layer,也是當前的layer物件,始終唯一。

3.屬性與方法

+ (nullable id)defaultValueForKey:(NSString *)key;

+ (BOOL)needsDisplayForKey:(NSString *)key;//這個方法也只使用在子類中重寫,用於設定在某些屬性改變時是否進行layer重繪

- (BOOL)shouldArchiveValueForKey:(NSString *)key;//子類重寫這個方法設定屬性是否可以被歸檔

@property CGRect bounds;//設定layer尺寸

@property CGPoint position;//設定layer位置

@property CGFloat zPosition;//設定其在父layer中的層次,預設為0,這個值越大,層次越靠上,蘋果不建議使用

@property CGPoint anchorPoint;//錨點

@property CGFloat anchorPointZ;//在Z軸上的錨點位置 3D變換時會有很大影響

@property CATransform3D transform;//進行3D變換

- (CGAffineTransform)affineTransform;//獲取CGAffineTransform變換

- (void)setAffineTransform:(CGAffineTransform)m;//設定CGAffineTransform變換

@property CGRect frame;//設定layer的frame

@property(getter=isHidden) BOOL hidden;//設定是否隱藏

@property(getter=isDoubleSided) BOOL doubleSided;//每個layer層有兩面,這個屬性確定是否兩面都顯示

@property(getter=isGeometryFlipped) BOOL geometryFlipped;//是否進行y軸的方向翻轉

- (BOOL)contentsAreFlipped;//獲取當前layer內容y軸方向是否被翻轉了

@property(nullable, readonly) CALayer *superlayer;//父layer檢視

- (void)removeFromSuperlayer;//從其父layer層上移除

@property(nullable, copy) NSArray<CALayer *> *sublayers;//所有子layer陣列

- (void)addSublayer:(CALayer *)layer;//新增一個字layer

- (void)insertSublayer:(CALayer *)layer atIndex:(unsigned)idx;//插入一個子layer

- (void)insertSublayer:(CALayer *)layer below:(nullable CALayer *)sibling;//將一個子layer插入到最下面

- (void)insertSublayer:(CALayer *)layer above:(nullable CALayer *)sibling;//將一個子layer插入到最上面

- (void)replaceSublayer:(CALayer *)layer with:(CALayer *)layer2;//替換一個子layer

@property CATransform3D sublayerTransform;//對其子layer進行3D變換

@property(nullable, strong) CALayer *mask;//遮罩層layer

@property BOOL masksToBounds;//舍否進行bounds的切割

//下面這些方法用於座標轉換

- (CGPoint)convertPoint:(CGPoint)p fromLayer:(nullable CALayer *)l;

- (CGPoint)convertPoint:(CGPoint)p toLayer:(nullable CALayer *)l;

- (CGRect)convertRect:(CGRect)r fromLayer:(nullable CALayer *)l;

- (CGRect)convertRect:(CGRect)r toLayer:(nullable CALayer *)l;

- (nullable CALayer *)hitTest:(CGPoint)p;//返回包含某一點的最上層的子layer

- (BOOL)containsPoint:(CGPoint)p;//返回layer的bounds內是否包含某一點

@property(nullable, strong) id contents;//設定layer的內容,一般會設定為CGImage的物件

@property CGRect contentsRect;//獲取內容的rect尺寸

@property(copy) NSString *contentsGravity;//設定內容的填充和對其方式

@property CGFloat contentsScale;//設定內容的縮放

@property CGRect contentsCenter;//確定一個矩形區域,當內容進行拉伸或者縮放的時候,這一部分的區域是會被形變的,例如預設設定為(0,0,1,1),則整個內容區域都會參與形變。如果我們設定為(0.25,0.25,0.5,0.5),那麼只有中間0.5*0.5比例寬高的區域會被拉伸,四周都不會。

@property(copy) NSString *minificationFilter;//設定縮小的模式

@property(copy) NSString *magnificationFilter;//設定放大的模式

@property float minificationFilterBias;//縮放因子

@property(getter=isOpaque) BOOL opaque;//設定內容是否完全不透明

- (void)display;//重新載入繪製內容

- (void)setNeedsDisplay;//設定內容為需要重新繪製

- (void)setNeedsDisplayInRect:(CGRect)r;//設定某一區域內容需要重新繪製

- (BOOL)needsDisplay;//獲取是否需要重新繪製

- (void)displayIfNeeded;//如果需要,進行內容重繪

@property BOOL needsDisplayOnBoundsChange;//這個屬性設定為YES,當內容改變時會自動呼叫- (void)setNeedsDisplay函式

- (void)drawInContext:(CGContextRef)ctx;//繪製內容

- (void)renderInContext:(CGContextRef)ctx;//讀取內容

@property(nullable) CGColorRef backgroundColor;//設定背景顏色

@property CGFloat cornerRadius;//設定圓角半徑

@property CGFloat borderWidth;//設定邊框寬度

@property(nullable) CGColorRef borderColor;//設定邊框顏色

@property float opacity;//設定透明度

@property(nullable) CGColorRef shadowColor;//設定陰影顏色

@property float shadowOpacity;//設定陰影透明度

@property CGSize shadowOffset;//設定陰影偏移量

@property CGFloat shadowRadius;//設定陰影圓角半徑

@property(nullable) CGPathRef shadowPath;//設定陰影路徑

- (void)addAnimation:(CAAnimation *)anim forKey:(nullable NSString *)key;//新增一個動畫物件 key值起到id的作用,通過key值,可以取到這個動畫物件

- (void)removeAllAnimations;//移除所有動畫物件

- (void)removeAnimationForKey:(NSString *)key;//移除某個動畫物件

- (nullable NSArray<NSString *> *)animationKeys;//獲取所有動畫物件的key值

- (nullable CAAnimation *)animationForKey:(NSString *)key;//通過key值獲取動畫物件