为了动画和特效,CALayer属性和使用的介绍是必不可少的。
一、CALayer的常用属性
1、@propertyCGPoint position;
图层中心点的位置,类似与UIView的center;用来设置CALayer在父层中的位置;以父层的左上角为原点(0,0)2、 @property CGPoint anchorPoint;
称『定位点』、『锚点』,该描述是相对于x、y位置比例而言的默认在图像中心点(0.5、0.5)的位置;决定着CALayer身上的哪个点会再position属性所指的位置,以自己的左上角为原点(0,0);它的x、y取值范围都是0~13、 @property(nullable) CGColorRef backgroundColor
图层背景颜色4、 @property(nullable) CGColorRef borderColor
图层边框颜色5、 @property CGFloat borderWidth
图层边框宽度6、 @property CGRect bounds
图层大小7、 @property(nullable, strong) id contents
图层显示内容,例如可以将图片作为图层内容显示8、 @property CGRect contentsRect
图层显示内容的大小和位置9、 @property CGFloat cornerRadius
圆角半径10、 @property(getter=isDoubleSided) BOOL doubleSided
图层背景是否显示,默认是YES11、 @property CGRect frame
图层大小和位置,不支持隐式动画,所以CALyaer中很少使用frame,通常使用bound和position代替12、 @property(getter=isHidden) BOOL hidden
是否隐藏13、 @property(nullable, strong) CALayer *mask
图层蒙版14、 @property BOOL masksToBounds
子图层是否剪切图层边界,默认是NO15、 @property float opacit;
图层透明度,类似与UIView的alpha16、 @property(nullable) CGColorRef shadowColor
阴影颜色17、 @property CGSize shadowOffset
阴影偏移量18、 @property float shadowOpacity
阴影透明度,注意默认为0,如果设置阴影必须设置此属性19、 @property(nullable) CGPathRef shadowPath
阴影形状20、 @property CGFloat shadowRadius
阴影模糊半径21、 @property(nullable, copy) NSArray
二、CALayer不常用属性
1、 @property CGFloat zPosition
图层中心点在z轴中的位置2、 @property CGFloat anchorPointZ
图层在z轴中的锚点;3、 - (CGAffineTransform)affineTransform
4、- (void)setAffineTransform:(CGAffineTransform)m
以上属性为图层形变;该属性值指定一个CGAffineTransform对象,该对象代表对CALayer执行X、Y两个维度(也就是平面)上的旋转、缩放、位移、斜切、镜像等变换矩阵5、 @property(nullable, readonly) CALayer *superlayer
图层的父图层
三、CALayer图层操作
1、 - (void)addSublayer:(CALayer *)layer
添加子图层2、 - (void)removeFromSuperlayer
将自己从父图层中移除3、 - (void)insertSublayer:(CALayer *)layer atIndex:(unsigned)idx
在自己子图层数组中的第idx位置添加图层4、 - (void)insertSublayer:(CALayer )layer below:(nullable CALayer )sibling
将图层layer添加在子图层sibling的下面5、 - (void)insertSublayer:(CALayer )layer above:(nullable CALayer )sibling
将图层layer添加在子图层sibling的上面6、 - (void)replaceSublayer:(CALayer )layer with:(CALayer )layer2
将图层layer替换layer2;
四、CALayer动画操作
1、 - (void)addAnimation:(CAAnimation )anim forKey:(nullable NSString )key
图层添加某一属性的动画2、 - (nullable NSArray< NSString > )animationKeys
获取所有动画的属性3、 - (nullable CAAnimation )animationForKey:(NSString )key
获取某一属性的动画4、 - (void)removeAnimationForKey:(NSString *)key
移除某一属性动画5、 - (void)removeAllAnimations
移除所有动画
五、CALayer子类其他说明
子类名称 | 用途 |
---|---|
CAEmitterLayer | 发射器层,用来控制粒子效果 |
CAGradientLayer | 梯度层,颜色渐变 |
CAEAGLayer | 用OpenGL ES绘制的层 |
CAReplicationLayer | 用来自动复制sublayer |
CAShapeLayer | 绘制立体的贝塞尔曲线 |
CAScrollLayer | 用来管理可滑动的区域 |
CATextLayer | 可以绘制AttributeString |
CATiledLayer | 用来管理一副可以被分割的大图 |
CATransformLayer | 用来渲染3D layer的层次结构 |
1. CAShapeLayer
CAShapeLayer属于QuartzCore框架,继承自CALayer。CAShapeLayer是在坐标系内绘制贝塞尔曲线的,通过绘制贝塞尔曲线,设置shape(形状)的path(路径),从而绘制各种各样的图形以及不规则图形。因此,使用CAShapeLayer需要与UIBezierPath一起使用。
UIBezierPath类允许你在自定义的 View 中绘制和渲染由直线和曲线组成的路径.。你可以在初始化的时候直接为你的UIBezierPath指定一个几何图形。
通俗点就是UIBezierPath用来指定绘制图形路径,而CAShapeLayer就是根据路径来绘图的。
属性
1、@property(nullable) CGPathRef path; 呈现的形状的路径
2、@property(nullable) CGColorRef fillColor;填充路径的颜色
3、@property(copy) CAShapeLayerFillRule fillRule; 当在填充颜色的时候则就需要这种填充规则,值有两种,非零和奇偶数,但默认是非零值。
4、@property(nullable) CGColorRef strokeColor;设置描边色,默认无色。
5、@property CGFloat strokeStart; 绘制边线轮廓路径的子区域。该值必须在[0,1]范围,0代表路径的开始,1代表路径的结束。 默认为0
6、@property CGFloat strokeEnd; 默认为1
7、@property CGFloat lineWidth; 线的宽度 默认为1
8、@property CGFloat miterLimit;最大斜接长度。斜接长度指的是在两条线交汇处和外交之间的距离。只有lineJoin属性为kCALineJoinMiter时miterLimit才有效。边角的角度越小,斜接长度就会越大。为了避免斜接长度过长,我们可以使用miterLimit属性。如果斜接长度超过miterLimit的值,边角会以lineJoin的“bevel”即kCALineJoinBevel类型来显示。
9、@property(copy) CAShapeLayerLineCap lineCap; 线端点类型,值有三个类型,分别为kCALineCapButt 、kCALineCapRound 、kCALineCapSquare,默认值为Butt;
10、@property(copy) CAShapeLayerLineJoin lineJoin;lineJoin为线连接类型,其值也有三个类型,分别为kCALineJoinMiter、kCALineJoinRound、kCALineJoinBevel,默认值是Miter。
11、@property CGFloat lineDashPhase;为线型模版的起始位置;lineDashPattern为线性模版,这是一个NSNumber的数组,索引从1开始记,奇数位数值表示实线长度,偶数位数值表示空白长度。
注:fillColor与strokeColor都是在有UIBezierPath参数配置的情况下才能发生作用12、@property(nullable, copy) NSArray<NSNumber *> *lineDashPattern;
2.CAReplicationLayer
属性
1、@property NSInteger instanceCount; 复制subLayer个数,默认为1
2、@property BOOL preservesDepth; 是否将3D例子系统平面化到一个图层(默认值)或者可以在3D空间中混合其他的图层
3、@property CFTimeInterval instanceDelay; 设置复制子层的延迟动画时长
4、@property CATransform3D instanceTransform; 设置复制子层的相对位置
5、@property(nullable) CGColorRef instanceColor; 子层颜色,会和原生子层背景色冲突,因此二者选其一设置
6、@property float instanceRedOffset;
设置每个复制图层相对上一个复制图层的红色偏移量7、@property float instanceRedOffset;
设置每个复制图层相对上一个复制图层的绿色偏移量8、@property float instanceBlueOffset;设置每个复制图层相对上一个复制图层的蓝色偏移量
9、@property float instanceAlphaOffset;设置每个复制图层相对上一个复制图层的透明度偏移量
网友评论