CALayer

CALayer

contents属性

layer 添加图片

contentGravity

相当于UIViewcontentMode 属性

contentsScale

为1 代表每个点绘制1个像素,一般设为图片的scale。当contentGravity 属性为kCAGravityResizeAspect时不会产生影响

contentsRect

默认{0,0,1,1} 设置寄宿图的显示区域,其余区域会被剪裁

contentsCenter

设置拉伸区域,相当于UIImage的resizableImageWithCapInsets:方法的效果

CALayerDelegate

CALayerDelegate CALayerDelegate是一个非正式协议,只是一个id类型的属性。

需要被重绘时,CALayer会请求它的代理给他一个寄宿图来显示。它通过调用下面这个方法做到的:

1
(void)displayLayer:(CALayerCALayer *)layer;

趁着这个机会,如果代理想直接设置contents属性的话,它就可以这么做,不然没有别的方法可以调用了。如果代理不实现-displayLayer:方法,CALayer就会转而尝试调用下面这个方法:

1
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx;

UIView 在创建它的宿主图层时,会自动把图层的delegate设置为它自己,并提供一个-displayLayer:的实现。

图层几何学

layout

UIView 与 CALayer 坐标

frame bounds center 属性仅仅是存取方法,改变他们实际上是在改变位于视图下方的CALayer的frame

当对图层做变换时,如旋转或缩放,frame实际上代表了覆盖在图层旋转之后的整个轴对齐的矩形区域,frame和bounds的宽高可能不一致了

锚点(anchorPoint)

anchorPoint 默认为 {0.5, 0.5} 图层会以 anchorPoint所在的点的位置 为图层相对于视图的中心点的位置

视觉效果

阴影

shadowOpacity 透明度 0 ~ 1

shadowOffset 偏移量 {0, -3} x , y 轴

shadowRadius 属性控制着阴影的模糊度,当它的值是0的时候,阴影就和视图一样有一个非常确定的边界线。当值越来越大的时候,边界线看上去就会越来越模糊和自然。苹果自家的应用设计更偏向于自然的阴影,所以一个非零值再合适不过了。

阴影剪裁

当图层使用maskToBounds 的时候,阴影会被剪裁,这时可以在外层添加一个不使用maskToBounds的空视图 来显示阴影

shadowPath

CGPath 指针 通过shadowPath 属性可以指定阴影的形状

图层模板(mask)

public var mask: CALayer? mask属性是一个CALayer 变量,定义了图层的可见区域。