一、基本属性
----------初始化
+ (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;