CALayer

作者: 玄裳 | 来源:发表于2017-02-16 19:49 被阅读0次

    CALayer类


    CALayer 是一个管理基于图像的内容,并允许执行动画内容的类。

    ** CALayer : NSObject <NSCoding, CAMediaTiming>**

    CALayer 继承于 NSObject遵循 NSCodingCAMediaTiming 协议,通常用于提供视图的后背存储,但也可以在不显示内容的情况下使用。

    CALayer 的主要工作是管理提供的可视内容,提供可设置的可视属性,例如backgroundColorbordershadow

    除了管理可视内容之外,CALayer 还可以维护在屏幕上呈现该内容的几何形状的信息,比如 positionsizetransform等。

    采用CAMediaTiming 协议来封装图层及其动画持续的时间和节奏,CAMediaTiming 协议定义了图层的定时信息。

    如果图层对象时由view 创建的,则view 会自动将自身指定为layerdelegate

    对于自定义创建的图层,可以分配 delegate 对象,并使用该对象动态提供图层的内容并执行其他任务。

    图层还可以具有布局管理对象(分配给layoutManager属性)以layoutManager管理子视图的布局。

    接口


    创建Layer

    ** +( instancetype ) layer ;**
    如果你子类化CALayer ,你可以重写这个方法,并使用它来提供你的特定子类的实例。

    ** - ( instancetype ) init ;**
    不指定图层对象的初始值。

    ** - ( instancetype ) initWithLayer: ( id ) layer ;**
    复制自定义的图层。

    访问相关图层对象

    ** - ( instancetype ) presentationLayer ;**
    返回表示图层对象的副本,表示当前在屏幕上显示的图层的状态。提供了当前正在屏幕上显示的图层的近似值。 动画正在进行时,可以检索此对象,并使用它来获取这些动画的当前值。

    ** - ( instancetype ) modelLayer ;**
    在呈现树中的图层上调用此方法会返回模型树中的相应图层对象。 只有当涉及表示层更改的事务正在进行时,此方法才返回值。 如果没有事务正在进行,则调用此方法没什么意义。

    访问delegate

    ** @property(weak)id <CALayerDelegate> delegate;**

    提供图层的内容

    ** @property(strong)id contents;**
    此属性的默认值为nil,如果使用图层显示静态图像,可以设值为 CGImageRef 对象 。 (在macOS 10.6以上版本中,可将属性设置为 NSImage 对象。)若需要交互,则避免设置此属性的内容。

    ** @property CGRect contentsRect;**
    默认为单位矩形(0.0,0.0,1.0,1.0)
    如果请求单位矩形外的像素,则内容图像的边缘像素将向外扩展。

    ** @property CGRect contentsCenter;**
    默认值为单位矩形(0.0,0.0) (1.0,1.0) ,整个图像在两个维度上缩放。 如果图层内容调整大小时如何缩放图层内容的矩形。

    ** - ( void ) display ;**
    重新加载图层的内容。不要直接调用,如果图层有委托对象,尝试调用委托的>displayLayer:方法来更新图层的内容。 如果委托没有实现displayLayer:方法,此方法将创建一个后台存储,并调用图层的drawInContext:方法来使用内容填充后台存储。 新的后备存储将替换该层的先前内容。

    ** - ( void ) drawInContext: ( CGContextRef ) ctx ;**
    使用指定的图形上下文绘制图层的内容。默认实现本身不会执行任何绘图。 如果图层的委托实现了drawLayer:inContext:方法,那么调用该方法来执行实际绘图。

    修改图层的外观

    ** @property(copy) NSString *contentsGravity;**
    默认值为kCAGravityResize
    内容的命名重力常数是基于垂直轴的方向。 如果你使用垂直分量的重力常数,例如kCAGravityTop ,你也应该检查图层的contentsAreFlipped(图层内容在呈现时是否隐式翻转)。 当这是YES时,kCAGravityTop将内容对齐到图层的底部,而kCAGravityBottom将内容对齐到图层的顶部。

    MacOSiOS中视图的默认坐标系统在垂直轴的方向上不同:在 macOS中,默认坐标系的原点位于绘图区域的左下角,正值从中向上延伸,在 iOS 中,默认坐标系默认坐标系的原点在绘图区域的左上角,正值从它向下延伸。

    设置图层内容重力的不同效果.png

    图1. 内容重力是kCAGravityResize - 默认值
    图2. 内容重力是kCAGravityCenter
    图3. 内容重力是contentsAreFlipped ? kCAGravityTop : kCAGravityBottom
    图4. 内容重力是contentsAreFlipped ? kCAGravityBottomLeft : kCAGravityTopLeft

    ** @property float opacity;**
    透明度,设值必须在0.0(透明)到1.0 (不透明)的范围内。

    ** @property(getter=isHidden) BOOL hidden;**
    隐藏该图层,默认值为NO

    ** @property BOOL masksToBounds;**
    默认值为NO 。当此属性的值为YES时,Core Animation将创建与图层边界匹配的隐式裁剪蒙版,并包括任何角半径效果。 如果还指定了mask 属性的值,则将这两个掩码相乘以获得最终掩码值。

    ** @property(strong) CALayer *mask;**
    默认值为 nil 。图层的 Alpha 通道决定图层内容和背景显示的内容。 完全或部分不透明像素允许基础内容通过但完全透明像素显示内容。

    ** @property(getter=isDoubleSided) BOOL doubleSided;**
    默认值为YES 。设为YES时,图层旋转至其背面会显示镜像的图像,设为NO 时,则不会显示背面。但背面隐藏的视图仍然会响应点击事件(这和通过设置hidden 属性或者设置alpha0而隐藏的视图不同,那两种方式将不会响应事件)

    ** @property CGFloat cornerRadius;**
    用于绘制图层圆角。 默认情况下,角半径不适用于图层的contents属性中的图像; 它仅适用于图层的背景颜色和边框。 但是,将masksToBounds属性设置为YES会导致内容被剪切到圆角。

    ** @property CGFloat borderWidth;**
    图层边框。

    ** @property CGColorRef borderColor;**
    图层边框的颜色。

    ** @property CGColorRef backgroundColor;**
    图层的背景颜色。

    ** @property float shadowOpacity;**
    图层的阴影不透明度,设值必须在0.0(透明)到1.0(不透明)的范围内。

    ** @property CGFloat shadowRadius;**
    图层阴影的圆角。

    ** @property CGSize shadowOffset;**
    图层阴影的偏移量。

    ** @property CGColorRef shadowColor;**
    图层的阴影颜色。

    ** @property CGPathRef shadowPath;**
    图层的阴影的路径/形状。

    ** @property(copy) NSDictionary *style;**
    存储没有被图层显式定义的属性值的可选字典。

    该字典可以进一层具有 style 键,形成默认值的层次结构。 在分层样式字典的情况下,使用属性的最浅的值。 例如,“style.someValue” 的值优先于 “style.style.someValue”。如果样式字典未定义属性的值,则调用接收器的 defaultValueForKey: 方法。 此属性的默认值为nil

    ** @property BOOL allowsEdgeAntialiasing;**
    指示是否允许图层执行边缘抗锯齿的布尔值。
    当值为YES时,允许图层根据图层的edgeAntialiasingMask属性中的值要求(顶部,左侧,底部,右侧),对其边缘进行抗锯齿处理。 默认值从main bundleInfo.plist 文件中的布尔UIViewEdgeAntialiasing 属性读取。 如果未找到任何值,则默认值为NO

    ** @property BOOL allowsGroupOpacity;**
    图层是否允许将其自身组合为与其父级独立分开的组。即各图层的透明效果是独立的。
    当值为 YES 并且图层的 opacity 属性值小于 1.0 时,图层允许将其自身复合为与其父级分离的组。 当图层包含多个不透明组件时,这会产生正确的结果,但可能会降低性能。
    默认值从main bundleInfo.plist 文件中的布尔值UIViewGroupOpacity 属性读取。 如果未找到值,则针对iOS 7 SDK 或更高版本链接的应用程序的默认值为YES ,对于使用较早版本的SDK 链接的应用程序则为默认值。

    访问图层的滤镜

    ** @property(copy) NSArray *filters;**
    默认值为nil 。图层及其子图层内容的 Core Image 滤镜数组。
    添加到此属性的滤镜会影响图层的内容,包括其边框,已填充的背景和子图层。
    CIFilter对象附加到图层后直接更改其输入会导致未定义的行为。 可以在将滤镜参数附加到图层后修改滤镜参数,但是必须使用图层的setValue:forKeyPath:方法才能这样做。必须为滤镜分配名称,以便可以在数组中标识它。 例如,要更改滤镜的inputRadius参数,可以使用类似于以下代码:
    CIFilter *filter = ...; CALayer *layer = ...; filter.name = @"myFilter"; layer.filters = [NSArray arrayWithObject:filter]; [layer setValue:[NSNumber numberWithInt:1] forKeyPath:@"filters.myFilter.inputRadius"];

    ** @property(strong) id compositingFilter;**
    默认值为nil ,会导致图层使用源过度合成。 推荐使用CICategoryCompositeOperation类别中的内容。

    ** @property(copy) NSArray *backgroundFilters;**
    默认值为nil。背景滤镜影响在图层本身中显示的图层后面的内容。 通常,此内容属于作为图层父级的上层。 这些滤镜不会影响图层本身的内容,包括图层的背景颜色和边框。可使用图层的masksToBounds来控制其背景滤镜效果的程度。

    ** @property(copy) NSString *minificationFilter;**
    减少内容大小时使用的滤镜, 默认值为kCAFilterLinear 。使用到的枚举常量:

    • kCAFilterLinear
      双线行滤波算法,它通过对多个不同的像素取样,生成一个新的值,得到一个相对平滑的拉伸效果。
    • kCAFilterNearest
      就近取单像素点的方法,出来的图片无可避免的会模糊,它只适用线条简单的图片。
    • kCAFilterTrilinear
      三线性滤波算法,和kCAFilterLinear很相似,大多数情况下表现相同,区别在于三线性滤波算法储存了多个大小的图片,通过三维取样,对所储存图片的大小进行比较得出合适的值。

    ** @property float minificationFilterBias;**
    缩小滤镜用于确定细节水平的偏差因子。当minificationFilter设置为kCAFilterTrilinear时,将使用此值。默认值为0.0

    ** @property(copy) NSString *magnificationFilter;**
    当增加内容的大小时使用的过滤器。默认值为kCAFilterLinear

    左边的圆圈使用kCAFilterLinear ,右边的圆圈使用kCAFilterNearest .png
    配置图层的显示行为

    ** @property(getter=isOpaque) BOOL opaque;**
    默认值为NO 。 如果绘制完全不透明的内容填充图层的边界,设值为YES可以让系统优化图层的显示行为。当图层为绘图命令创建后备存储时,Core Animation 会省略后备存储的Alpha通道。 这样做可以提高合成操作的性能。** 如果设为YES时 ,则必须使用不透明内容填充图层的边界。**
    设置此属性仅影响由Core Animation管理的后备存储。 如果图层的contents属性指定带有Alpha通道的图片,则该图片会保留其Alpha通道,无论此属性的值如何。

    ** @property CAEdgeAntialiasingMask edgeAntialiasingMask;**
    指定图层的哪些边被抗锯齿,并且是CAEdgeAntialiasingMask中定义的CAEdgeAntialiasingMask。 可以分别为每个边缘(顶部,左侧,底部,右侧)启用或禁用抗锯齿。 默认情况下,对所有边都启用抗锯齿。使用该属性来为邻接其他图层边缘的边缘禁用抗锯齿,以消除否则会发生的接缝。定义使用下面的常量:

    • kCALayerLeftEdge //左侧
    • kCALayerRightEdge //右侧
    • kCALayerBottomEdge //底部
    • kCALayerTopEdge //顶部

    ** - (BOOL)contentsAreFlipped;**
    默认返回 NO ,图层内容在呈现时是否隐式翻转。如果图层需要翻转其内容,则从此方法返回YES ,并将y-flip变换应用于图形上下文,然后将其传递给图层的drawInContext:方法。 类似地,图层将传递给其setNeedsDisplayInRect:任何矩形转换为翻转的坐标空间。

    ** @property(getter=isGeometryFlipped) BOOL geometryFlipped;**
    默认值为NO ,图层及其子图层的几何是否垂直翻转。

    ** @property BOOL drawsAsynchronously;**
    默认值为NO,设置为YES 时,用于绘制图层内容队列的图形上下文绘制命令,并在后台线程上执行它们,而不是同步执行它们。 以异步方式执行这些命令可以提高某些应用程序的性能。 但是,在启用此功能之前,应始终衡量实际的性能优势。

    ** @property BOOL shouldRasterize;**
    默认值为NO,图层是否在合成之前作为位图呈现。当设成YES时,layer 被渲染成一个位图,并缓存起来,等下次使用时不会再重新去渲染了。实现圆角本身就是在做颜色混合(blending),如果每次页面出来时都合成,消耗太大,这时shouldRasterize = YES,下次就只是简单的从渲染引擎的cache 里读取那张位图,节约系统资源。
    如果在滚动tableView时,每次都执行圆角设置,肯定会阻塞UI,设置这个将会使滑动更加流畅。

    ** @property CGFloat rasterizationScale;**
    默认值为1.0 ,表示图层应按当前大小进行栅格化。当 shouldRasterize 属性中的值为 YES 时,图层将使用此属性来确定是否缩放栅格化内容(以及多少)。 较大的值放大内容,较小的值收缩它。

    ** @property(copy)NSString * contentsFormat;**
    图层内容的所需存储格式,默认值为kCAContentsFormatRGBA8UintUIView 和基于图层的 NSView 对象可以将值更改为适合当前设备的格式。

    ** - (void)renderInContext:(CGContextRef)ctx;**
    将图层及其子图层渲染​​到指定的上下文中。

    修改图层几何

    ** @property CGRect frame;**
    图层的框架矩形,相对于父视图中的坐标。frame 属性不是直接可动的。

    ** @property CGRect bounds;**

    图层的边界矩形,相对于自身的坐标。

    ** @property CGPoint position;**
    以点为单位指定,并始终相对于anchorPoint 属性中的值指定。 对于新的独立图层,默认位置设置为(0.0,0.0)。 更改frame 属性还会更新此属性中的值。

    ** @property CGFloat zPosition;**

    图层在z轴上的位置,默认值为0。 更改此属性的值会更改屏幕上图层的从前到后的顺序。 较高的值观看者越容易看到。 这可能影响其框架矩形重叠的图层的可见性。

    ** @property CGFloat anchorPointZ;**
    默认值为0 ,指定 z 轴上的定位点,围绕其发生几何操作。 该点表示为沿着 z 轴的距离(以点为单位测量)。

    ** @property CGPoint anchorPoint;**
    定义图层边界矩形的定位点,使用单位坐标空间指定此属性的值。 默认值为(0.5,0.5),它表示图层的边界矩形的中心。 视图的所有几何操作都发生在指定点。 例如,对具有默认锚点的图层应用旋转变换会导致图层绕其中心旋转。 将锚点更改为不同的位置将导致图层围绕该新点旋转。

    ** @property CGFloat contentsScale;**
    图层内容的比例, 例如,若比例值为2.0 ,并且图层的边界为50 x 50点,则用于显示图层内容的位图的大小为100 x 100像素。默认值为1.0。 对于附加到视图的图层,视图会将缩放比例自动更改为适合当前屏幕的值。 对于自己创建和管理的图层,必须根据屏幕的分辨率和您提供的内容自行设置此属性的值。

    ** @property CATransform3D transform;**
    图层围绕锚点做几何变换。

    ** @property CATransform3D sublayerTransform;**
    子图层围绕锚点做几何变换。

    ** - (CGAffineTransform)affineTransform;**
    与图层transform属性中的值对应的仿射变换结构。

    ** - (void)setAffineTransform:(CGAffineTransform)m;**
    将图层的变换设置为指定的仿射变换。

    ** @property(copy) NSArray<CALayer *> *sublayers;**

    包含子图层的数组。当将sublayers 属性设置为用图层对象填充的数组时,数组中的每个图层都不能有一个 superlayer,也就是说,它的superlayer 属性必须为nil

    ** @property(readonly)CALayer * superlayer;**
    父图层。

    ** - (void)addSublayer:(CALayer *)layer;**
    添加子图层。

    ** - (void)removeFromSuperlayer;**
    从父图层中移除图层。

    ** - (void)insertSublayer:(CALayer *)layer atIndex:(unsigned int)idx;**
    把指定的图层插入指定索引处的 sublayers 数组中。

    ** - (void)insertSublayer:(CALayer *)layer below:(CALayer *)sibling;**
    在当前现有的子图层下面插入指定的子图层。

    ** - (void)insertSublayer:(CALayer *)layer above:(CALayer *)sibling;**
    在当前现有的子图层上面插入指定的子图层。

    ** - (void)replaceSublayer:(CALayer *)layer with:(CALayer *)layer2;**
    替换现有的旧子图层,使用指定的新子图层。

    更新图层显示

    ** - (void)setNeedsDisplay;**

    将图层的内容标记为需要更新。调用此方法将导致图层重新缓存其内容。 这导致该图层可能调用其代理的 displayLayer:drawLayer:inContext: 方法。 将删除图层的 contents 属性中的现有内容,以便为新内容腾出空间。

    ** - (void)setNeedsDisplayInRect:(CGRect)r;**
    将指定矩形内的区域内容标记为需要更新。

    ** @property BOOL needsDisplayOnBoundsChange;**
    默认值为 NO ,设置为YES时,每当其 bounds 属性更改时,图层将自动调用其 setNeedsDisplay 方法。

    ** - (void)displayIfNeeded;**
    如果图层当前被标记为需要更新,则启动图层的更新过程。您可以根据需要调用此方法,以强制在正常更新周期之外更新您的图层内容。更新图层的首选方法是调用setNeedsDisplay 并让系统在下一个周期内更新图层。

    ** - (BOOL)needsDisplay;**
    如果图层需要更新,则为YES

    ** + (BOOL)needsDisplayForKey:(NSString *)key;**
    默认实现返回 NO ,如果图层需要重新显示,则为YES

    图层动画

    ** - (void)addAnimation:(CAAnimation *)anim forKey:(NSString *)key;**、
    将指定的动画对象添加到图层的渲染树。

    ** - (CAAnimation *)animationForKey:(NSString *)key;**
    返回具有指定标识符的动画对象。

    ** - (void)removeAllAnimations;**
    移除附加在图层上的所有动画。

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

    移除附加在图层上的所有动画。

    ** - (NSArray<NSString *> *)animationKeys;**
    返回一个字符串数组,用于标识当前附加到图层的动画。数组的顺序与动画应用于图层的顺序相匹配。

    管理图层调整大小和布局

    ** @property(strong) id<CALayoutManager> layoutManager;**
    负责布局子图层的对象。分配给此属性的对象必须名义上实现 CALayoutManager 非正式协议。 如果图层的委托不处理布局更新,则赋予此属性的对象有机会更新图层子图层的布局。

    ** - (void)setNeedsLayout;**
    使图层的布局无效,并将其标记为需要更新。通常在图层的界限改变时或在添加或删除子层时自动调用此方法。

    ** - (void)layoutSublayers;**
    图层更新其布局。默认实现调用图层的委托对象的 layoutSublayersOfLayer: 方法。 如果没有委托对象,或者委托没有实现该方法,则此方法将调用 layoutManager属性中对象的layoutSublayersOfLayer: 方法。

    ** - (void)layoutIfNeeded;**
    如果需要,重新计算图层的布局。遍历图层的上层,直到找到不需要布局的元类层。 然后在该元类下的整个图层树上执行布局。

    ** - (BOOL)needsLayout;**
    图层是否已标记为需要布局更新。

    ** @property CAAutoresizingMask autoresizingMask;**
    用于定义当其上层的边界发生变化时如何调整图层的大小。

    ** - (void)resizeWithOldSuperlayerSize:(CGSize)size;**
    通知接收器其父层的大小改变了。当autoresizingMask属性用于调整大小和图层更改的边界时,该图层将在其每个子图层上调用此方法。 子图层调整自己的框架矩形以反映新的父层边界,可以直接从父层检索。 将父层的旧大小作为参数传递,以便子层具有用于其必须进行的任何计算的信息。

    ** - (void)resizeSublayersWithOldSize:(CGSize)size;**
    通知接收器的子层,接收器的大小已经改变。当 autoresizingMask 属性用于调整大小并且此图层的边界更改时,将调用此方法。 默认实现调用每个子图层的 resizeWithOldSuperlayerSize: 方法,让它知道它的父层的边界改变了。

    ** - (CGSize)preferredFrameSize;**
    图层在其父层的坐标空间中的预设大小。

    管理图层约束

    ** @property(copy) NSArray<CAConstraint *> *constraints;**
    用于定位当前图层的子图层的约束

    ** - (void)addConstraint:(CAConstraint *)c;**
    将指定的约束添加到图层。

    获取图层的操作

    ** - (id<CAAction>)actionForKey:(NSString *)event;**
    搜索图层的给定操作对象。 操作定义图层的动态行为。
    例如,图层的可动画属性通常具有相应的动作对象以启动实际动画。 当该属性更改时,图层将查找与属性名称关联的操作对象并执行它。 还可以将自定义操作对象与图层相关联,以实现特定于应用程序的操作。
    按以下顺序搜索layer的关联操作:

    1. 如果图层具有实现actionForLayer:forKey:方法的委托,则图层将调用该方法。 代理必须执行以下操作之一:
    • 返回给定键的操作对象。
    • 返回NSNull对象,如果它不处理操作。
    1. 该图层在图层的actions字典中查找匹配的键/操作对。
    2. 该层在style字典中查找匹配键/操作对的actions字典。
    3. 图层调用defaultActionForKey: class方法来查找任何类定义的操作。
      如果任何上述步骤返回NSNull的实例,则在继续之前将其转换为nil
      当调用动作对象时,它接收三个参数:事件的名称,事件发生的对象(layer),以及每个事件类型特定的命名参数的字典。

    ** @property(copy) NSDictionary<NSString *,id<CAAction>> *actions;**
    默认值为nil ,包含图层动作的字典。可以使用此字典存储图层的自定义操作。

    ** + (id<CAAction>)defaultActionForKey:(NSString *)event;**
    默认操作。

    坐标和时间之间的映射

    ** - (CGPoint)convertPoint:(CGPoint)p fromLayer:(CALayer *)l;**
    把指定图层 LayerA 中的坐标点P转换为接收对象 LayerB 的坐标点。

    ** - (CGPoint)convertPoint:(CGPoint)p toLayer:(CALayer *)l;**
    把接收对象 LayerB 的中坐标点P 转换为指定图层 LayerA 中的坐标点。

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

    把指定图层 LayerA 中的矩形区域rect转换为接收对象 LayerB 的矩形区域。

    ** - (CGRect)convertRect:(CGRect)r toLayer:(CALayer *)l;**
    把接收对象 LayerB 的矩形区域rect转换为指定图层 LayerA 中矩形区域。

    ** - (CFTimeInterval)convertTime:(CFTimeInterval)t fromLayer:(CALayer *)l;**
    把指定图层 LayerA 中的时间间隔t转换为接收对象 LayerB 的时间间隔。

    ** - (CFTimeInterval)convertTime:(CFTimeInterval)t toLayer:(CALayer *)l;**
    把接收对象 LayerB 的时间间隔t转换为指定图层 LayerA 中的时间间隔。

    测试

    ** - (CALayer *)hitTest:(CGPoint)p;**
    返回包含指定点的图层层次结构(包括自身)中接收器的最底层的图层。

    ** - (BOOL)containsPoint:(CGPoint)p;**
    接收对象是否包含指定点。

    滚动

    ** @property(readonly) CGRect visibleRect;**
    图层在其自己的坐标空间中的可见区域。可见区域是未被包含滚动层剪切的区域。

    ** - (void)scrollPoint:(CGPoint)p;**
    当前图层中应该滚动到位置的点。

    ** - (void)scrollRectToVisible:(CGRect)r;**
    在当前可见区域内滚动。

    标识辨别

    ** @property(copy) NSString *name;**
    默认值为nil ,一些布局管理器使用图层名称来标识图层。

    键值编码扩展

    ** - (BOOL)shouldArchiveValueForKey:(NSString *)key;**

    是否应存档指定键的值。若应归档,则为 YES ,若不归档,则为 NO

    ** + (id)defaultValueForKey:(NSString *)key;**
    与指定键关联的默认值。

    常量

    ** CAAutoresizingMask**

    • kCALayerNotSizable
      无法调整图层的大小。
    • kCALayerMinXMargin
      图层和它的父视图之间的左边距是灵活的。
    • kCALayerWidthSizable
      图层的宽度是灵活的。
    • kCALayerMaxXMargin
      图层和它的父视图之间的右边距是灵活的。
    • kCALayerMinYMargin
      图层和它的父视图的底部边缘是灵活的。
    • kCALayerHeightSizable
      图层的高度是灵活的。
    • kCALayerMaxYMargin
      图层和它的父视图之间的顶部边缘是灵活的。

    ** Action Identifiers**

    • kCAOnOrderIn
      表示当图层变为可见时采取的操作的标识符,作为结果插入可见图层层次结构或该图层不再设置为隐藏。
    • kCAOnOrderOut
      表示从图层层次结构中删除图层或隐藏图层时所采取操作的标识符。
    • kCATransition
      表示过渡动画的标识符。

    ** CAEdgeAntialiasingMask**

    • kCALayerLeftEdge //左侧
    • kCALayerRightEdge //右侧
    • kCALayerBottomEdge //底部
    • kCALayerTopEdge //顶部

    ** Contents Gravity Values**

    • kCAGravityCenter
      内容在边界矩形中水平和垂直居中。
    • kCAGravityTop
      内容水平居中在边界矩形的顶边。
    • kCAGravityBottom
      内容水平居中在边界矩形的底边。
    • kCAGravityLeft
      内容垂直居中在边界矩形的左边缘。
    • kCAGravityRight
      内容垂直居中于边界矩形的右边缘。
    • kCAGravityTopLeft
      内容位于边界矩形的左上角。
    • kCAGravityTopRight
      内容位于边界矩形的右上角。
    • kCAGravityBottomLeft
      内容位于边界矩形的左下角。
    • kCAGravityBottomRight
      内容位于边界矩形的右下角。
    • kCAGravityResize
      内容将调整大小以适合整个边界矩形。
    • kCAGravityResizeAspect
      内容被调整大小以适合边界矩形,保留内容的方面。 如果内容未完全填充边界矩形,则内容以部分轴为中心。
    • kCAGravityResizeAspectFill
      内容被调整大小以完全填充边界矩形,同时仍保留内容的方面。 内容以其超过的轴为中心。

    ** Identity Transform**

    • CATransform3DIdentity
      转换矩阵。

    ** Scaling Filters**

    • kCAFilterLinear
      双线行滤波算法,它通过对多个不同的像素取样,生成一个新的值,得到一个相对平滑的拉伸效果。
    • kCAFilterNearest
      就近取单像素点的方法,出来的图片无可避免的会模糊,它只适用线条简单的图片。
    • kCAFilterTrilinear
      三线性滤波算法,和kCAFilterLinear很相似,大多数情况下表现相同,区别在于三线性滤波算法储存了多个大小的图片,通过三维取样,对所储存图片的大小进行比较得出合适的值。

    ** CATransform3D**

    变换矩阵用于旋转,缩放,平移,倾斜和投影层内容。 提供了用于创建,连接和修改CATransform3D数据的函数。字段:

    • m11
      矩阵中位置1,1处的条目。
    • m12
      矩阵中位置1,2处的条目。
    • m13 矩阵中位置1,3``处的条目。
    • m14
      矩阵中位置1,4处的条目。
    • m21
      矩阵中位置2,1处的条目。
    • m22
      矩阵中位置2,2处的条目。
    • m23
      矩阵中位置2,3处的条目。
    • m24
      在矩阵中位置2,4处的条目。
    • m31
      矩阵中位置3,1处的条目。
    • m32
      矩阵中位置3,2处的条目。
    • m33
      在矩阵中的位置3,3处的条目。
    • m34
      矩阵中位置3,4处的条目。
    • m41
      矩阵中位置4,1处的条目。
    • m42
      矩阵中位置4,2处的条目。
    • m43
      矩阵中位置4,3处的条目。
    • m44
      矩阵中位置4,4处的条目。
    初始化

    ** + (CALayer *)layerWithRemoteClientId:(uint32_t)client_id;**
    官方文档未作出解释。

    Layer 与 View


    Layer 与 View .png

    CALayer 的子类以及用途


    CALayer 的子类以及用途.png

    本文参考苹果官方文档翻译,如有误,请指出,谢谢。

    相关文章

      网友评论

        本文标题:CALayer

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