CALayer
contents属性
为layer
添加图片
contentGravity
相当于UIView
的contentMode
属性
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
变量,定义了图层的可见区域。