CALayer类
CALayer
是一个管理基于图像的内容,并允许执行动画内容的类。
**
CALayer : NSObject <NSCoding, CAMediaTiming>
**
CALayer
继承于 NSObject
,遵循 NSCoding
、CAMediaTiming
协议,通常用于提供视图的后背存储,但也可以在不显示内容的情况下使用。
CALayer
的主要工作是管理提供的可视内容,提供可设置的可视属性,例如backgroundColor
、border
和 shadow
。
除了管理可视内容之外,CALayer
还可以维护在屏幕上呈现该内容的几何形状的信息,比如 position
、 size
、transform
等。
采用CAMediaTiming
协议来封装图层及其动画持续的时间和节奏,CAMediaTiming
协议定义了图层的定时信息。
如果图层对象时由view
创建的,则view
会自动将自身指定为layer
的delegate
。
对于自定义创建的图层,可以分配 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
将内容对齐到图层的顶部。
设置图层内容重力的不同效果.png
MacOS
和iOS
中视图的默认坐标系统在垂直轴的方向上不同:在macOS
中,默认坐标系的原点位于绘图区域的左下角,正值从中向上延伸,在iOS
中,默认坐标系默认坐标系的原点在绘图区域的左上角,正值从它向下延伸。
图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
属性或者设置alpha
为0
而隐藏的视图不同,那两种方式将不会响应事件)
**
@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 bundle
的Info.plist
文件中的布尔UIViewEdgeAntialiasing
属性读取。 如果未找到任何值,则默认值为NO
。
**
@property BOOL allowsGroupOpacity;
**
图层是否允许将其自身组合为与其父级独立分开的组。即各图层的透明效果是独立的。
当值为YES
并且图层的opacity
属性值小于1.0
时,图层允许将其自身复合为与其父级分离的组。 当图层包含多个不透明组件时,这会产生正确的结果,但可能会降低性能。
默认值从main bundle
的Info.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
。
**
左边的圆圈使用kCAFilterLinear ,右边的圆圈使用kCAFilterNearest .png@property(copy) NSString *magnificationFilter;
**
当增加内容的大小时使用的过滤器。默认值为kCAFilterLinear
。
配置图层的显示行为
**
@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;
**
图层内容的所需存储格式,默认值为kCAContentsFormatRGBA8Uint
,UIView
和基于图层的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
的关联操作:
- 如果图层具有实现
actionForLayer:forKey:
方法的委托,则图层将调用该方法。 代理必须执行以下操作之一:
- 返回给定键的操作对象。
- 返回
NSNull
对象,如果它不处理操作。
- 该图层在图层的
actions
字典中查找匹配的键/操作对。 - 该层在
style
字典中查找匹配键/操作对的actions
字典。 - 图层调用
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
本文参考苹果官方文档翻译,如有误,请指出,谢谢。
网友评论