CALayer

一、基本属性

----------初始化   

 + (instancetype)layer;   

 - (instancetype)init;    

- (instancetype)initWithLayer:(id)layer;    

----------其它方法    

+ (nullable id)defaultValueForKey:(NSString *)key;//返回这个属性名所对应的属性值的默认值,如果默认值是未知的,则返回nil,子类可以重载这个方法,来设定一些默认值。    

+ (BOOL)needsDisplayForKey:(NSString *)key;// 子类重载方法,当属性改变(也包括通过动画造成的layer的改变)需要重绘layer的内容时,返回YES。这个方法默认返回NO,不要通过CALayer返回YES,这样会出现不定的错误。    

- (BOOL)shouldArchiveValueForKey:(NSString *)key;//在调用-encodeWithCode方法时使用,表示某一属性值是否可以归档。默认YES,可以归档。子类中需要对自定义的属性归档的话,可以调用这个方法    ----------瘸子、瞎子   

- (nullable instancetype)presentationLayer;//负责绘制   

 - (instancetype)modelLayer;//负责指路线    

----------层次设置,包括添加、插入、删除、替换等----------    

- (void)addSublayer:(CALayer *)layer;   

- (void)insertSublayer:(CALayer *)layer atIndex:(unsigned)idx;   

- (void)insertSublayer:(CALayer *)layer below:(nullable CALayer *)sibling;   

- (void)insertSublayer:(CALayer *)layer above:(nullable CALayer *)sibling;   

- (void)removeFromSuperlayer;    

- (void)replaceSublayer:(CALayer *)layer with:(CALayer *)layer2;    

---------位置、大小    

@property CGRect frame;  //不支持动画  

@property CGRect bounds;  //支持动画  

@property CGPoint position;//支持动画   

@property CGFloat zPosition;//支持动画   

@property CGPoint anchorPoint; //支持动画 

@property CGFloat anchorPointZ; //支持动画 

---------仿射变化    //用来访问'变换'属性:仿射变换的存取器方法。    

- (CGAffineTransform)affineTransform;    

- (void)setAffineTransform:(CGAffineTransform)m;    

@property CATransform3D transform;//3D位置    

--------边角属性    

@property(nullable, strong) CALayer *mask;//遮罩层layer,于layer重合的部分显示  

@property BOOL masksToBounds;//是否遮挡裁边外的部分    

@property CGFloat cornerRadius;//边角半径    

@property CGFloat borderWidth;//边缘线宽度    

@property(nullable) CGColorRef borderColor;//边缘线的颜色   

--------阴影属性    

@property(nullable) CGColorRef shadowColor;//设置阴影颜色    

@property float shadowOpacity; //设置阴影透明度,默认0,值在[0,1]之间,支持动画    @property CGSize shadowOffset;//设置阴影偏移量. 默认(0, -3),支持动画.    @property CGFloat shadowRadius;//设置阴影圆角半径    

@property(nullable) CGPathRef shadowPath;//设置阴影路径.默认null,支持动画.    

--------隐藏    

@property(getter=isDoubleSided) BOOL doubleSided;//当时false时,层远离观察者的那一面隐藏(图层有双面,是否都显示,设置NO意思背面看不到,当为NO时,然后旋转180度,则看不到layer层),默认是YES,支持动画。    

--------坐标转化    

- (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;    

- (CFTimeInterval)convertTime:(CFTimeInterval)t fromLayer:(nullable CALayer *)l;    

- (CFTimeInterval)convertTime:(CFTimeInterval)t toLayer:(nullable CALayer *)l;    

-----------------命中检测方法   

 //iOS中,hit-Testing的作用就是找出这个触摸点下面的View(layer)是什么,HitTest会检测这个点击的点是不是发生在这个View(layer)上    

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

- (BOOL)containsPoint:(CGPoint)p;//返回layer是否包含某一点    

-----------------内容属性    

@property(nullable, strong) id contents;//设置layer的内容,一般会设置为CGImage的对象          //获取内容的rect尺寸    

@property CGRect contentsRect;          

*contentsGravity属性决定了内容对齐与填充方式,它可以分为两个方面:   

 1.不改变内容的原始大小    

这种模式中不会改变内容的原始大小,如果层的尺寸小于内容的尺寸,则内容会被切割,如果层的尺寸大于内容的尺寸,多出的部分将会显示层的背景颜色。    

 2.改变内容的尺寸大小   

 这种模式设置的实际上是一种填充方式:   

 *   

 @property(copy) NSString *contentsGravity;    

@property CGFloat contentsScale//设置内容的缩放        

//这个属性确定一个矩形区域,当内容进行拉伸或者缩放的时候,这一部分的区域是会被形变的,例如默认设置为(0,0,1,1),则整个内容区域都会参与形变。如果我们设置为(0.25,0.25,0.5,0.5),那么只有中间0.5*0.5比例宽高的区域会被拉伸,四周都不会。    @property CGRect contentsCenter;       

 //设置缩小的模式    

@property(copy) NSString *minificationFilter;        

//设置放大的模式    

@property(copy) NSString *magnificationFilter;        

//缩放因子    @property float minificationFilterBias;        

//设置内容是否完全不透明。默认是NO    

@property(getter=isOpaque) BOOL opaque;        

//重新加载绘制内容    

- (void)display;        

//设置内容为需要重新绘制    

- (void)setNeedsDisplay;    

//设置某一区域内容需要重新绘制    

- (void)setNeedsDisplayInRect:(CGRect)r;        

//获取是否需要重新绘制    

- (BOOL)needsDisplay;        

//如果需要,进行内容重绘    

- (void)displayIfNeeded;        

//这个属性设置为YES,当内容改变时会自动调用

- (void)setNeedsDisplay函数.默认是NO    

@property BOOL needsDisplayOnBoundsChange;        

//默认是NO    

@property BOOL drawsAsynchronously        

//绘制与读取内容    

- (void)drawInContext:(CGContextRef)cox;    

- (void)renderInContext:(CGContextRef)cox;        

//这个属性值用于限定层的边缘是如何栅格化。通常,该属性用于关闭抗锯齿用于边沿的其他紧靠层的边缘,以消除否则会发生的接缝。默认值时所有值都抗锯齿。    

@property CAEdgeAntialiasingMask edgeAntialiasingMask;       

 //当为真时,则层对由edgeAntialiasingMask属性的值要求的边抗锯齿。默认值是从主束的Info.plist布尔UIViewEdgeAntialiasing属性读取。如果Info.plist中没有找到值则,默认值是NO。    

@property BOOL allowsEdgeAntialiasing;        

//设置背景颜色 默认nil.    

@property(nullable) CGColorRef backgroundColor;        

//设置圆角半径 默认zero    

@property CGFloat cornerRadius;        

//设置边框宽度    

@property CGFloat borderWidth;        

//设置边框颜色    

@property(nullable) CGColorRef borderColor;        

//设置透明度    

@property float opacity;    

--------------------layer的关于动画的方法        

//添加一个动画对象 key值起到id的作用,通过key值,可以取到这个动画对象    

- (void)addAnimation:(CAAnimation *)anim forKey:(nullable NSString *)key;        

//移除所有动画对象    

- (void)removeAllAnimations;        

//移除某个动画对象    

- (void)removeAnimationForKey:(NSString *)key;       

 //获取所有动画对象的key值    

- (nullable NSArray*)animationKeys;

你可能感兴趣的:(CALayer)