CALayer常用属性整理
- 图层可以包含子图层。就像视图可以包含子视图,图层也可以有子图层,稍加利用就能打造漂亮的效果!
- 图层属性自带动画效果。修改图层属性时,存在默认的动画效果,你也可以自定义动画行为。
- 图层是轻量概念。相对视图而言,图层更加轻量,因此图层可以帮助提升性能。
代码块
func setUpLayer() {
//背景颜色
l.backgroundColor = UIColor.blueColor().CGColor
//边框宽度
l.borderWidth = 100.0
//边框颜色
l.borderColor = UIColor.redColor().CGColor
//阴影透明度
l.shadowOpacity = 0.7
//阴影宽度
l.shadowRadius = 10.0
//阴影偏移量
l.shadowOffset = CGSize(width: 0, height: 3)
//contents属性可以把图层的内容设为图片
l.contents = UIImage(named: "star")?.CGImage
//设置contents位置
l.contentsGravity = kCAGravityCenter
//使用过滤器,过滤器在图像利用contentsGravity放大时发挥作用,可用于改变大小(缩放、比例缩放、填充比例缩放)和位置(中心、上、右上、右等等)。以上属性的改变没有动画效果,另外如果geometryFlipped未设为true,几何位置和阴影会上下颠倒
l.magnificationFilter = kCAFilterLinear
l.geometryFlipped = false
}
附加属性
CALayer还有两个附加属性有助于改善性能:shouldRasterize和drawsAsynchronously。
shouldRasterize默认为false,设为true可以改善性能,因为图层内容只需要一次渲染。相对画面中移动但自身外观不变的对象效果拔群。
drawsAsynchronously默认值也是false。与shouldRasterize相对,该属性适用于图层内容需要反复重绘的情况,此时设成true可能会改善性能,比如需要反复绘制大量粒子的粒子发射器图层
- 谨记:如果想将已有图层的shouldRasterize或drawsAsynchronously属性设为true,一定要三思而后行,考虑可能造成的影响,对比true与false的性能差异,辨明属性设置是否有积极效果。设置不当甚至会导致性能大幅下降。