CALayer的属性和使用(持续更新)

作者: 今晚月色 | 来源:发表于2018-11-23 16:30 被阅读96次
    镇楼专用

    为了动画和特效,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~1

    • 3、 @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
      图层背景是否显示,默认是YES

    • 11、 @property CGRect frame
      图层大小和位置,不支持隐式动画,所以CALyaer中很少使用frame,通常使用bound和position代替

    • 12、 @property(getter=isHidden) BOOL hidden
      是否隐藏

    • 13、 @property(nullable, strong) CALayer *mask
      图层蒙版

    • 14、 @property BOOL masksToBounds
      子图层是否剪切图层边界,默认是NO

    • 15、 @property float opacit;
      图层透明度,类似与UIView的alpha

    • 16、 @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;设置每个复制图层相对上一个复制图层的透明度偏移量

    相关文章

      网友评论

        本文标题:CALayer的属性和使用(持续更新)

        本文链接:https://www.haomeiwen.com/subject/ntnjqqtx.html