总结:
默认情况下,UIView会帮你创建一个CALayer对象的图层,通常情况下你也不需要改变它。但是在一些高级动画中,或者使用其他类型图层看起来更合适的时候,如果你想替换掉原来的layers,可以通过下面的这个方法:
+ (Class) layerClass {
return [CAMetalLayer class];
}
这样,你的UIView甚至实现了定制,你可以用这种方法自己写一个UIImageView。
在Mac下如果想改变默认的layer需要通过下面这个方法:makeBackingLayer。这是和iOS不同的地方。
iOS下的layer class如下:每一个都需要深入研究,当然我并没有研究,只是大体了解,做个梳理,如有不对恳请指出。
CAEmitterLayer:粒子系统,比如雪花、烟花等等特效都可以通过它来实现。
CAGradientLayer:处理颜色渐变的。
CAMetalLayer:这个貌似很强大,做一些纹理特效等。
CAEAGLLayer:绘图专用。
CAReplicatorLayer:高效生成许多相似的图层。
CAScrollLayer:可以显示部分内容,允许用户滑动,类似UIScrollView。
CAShapeLayer:通过矢量图形而不是bitmap来绘制的图层子类。
CATextLayer:类比UILabel。
CATiledLayer:将大图分解成小图,按需加载。
CATransformLayer:3D图层渲染。
给图层提供contents有三种方法:
1.直接添加对象:
2.通过代理添加,类似UIView:
有两个代理方法都可以:displayLayer:,drawLayer:inContext:
如果同时实现,只会执行displayLayer:方法。
3.子类化:
需要重写的方法:
display可以添加contents
drawInContext:主要用来绘制。