首页 > 代码库 > CALayer一些知识~...3

CALayer一些知识~...3

CALayer回吐的先后顺序是怎样的呢?CALayer绘图时是先绘制父Layer的内容,然后绘制子Layer的内容,这样便可以让子Layer显示在父Layer上面

•要在CALayer上绘图,有两种方法:
1.创建一个CALayer的子类,然后覆盖drawInContext:方法,可以使用Quartz2D API在其中进行绘图
2.设置CALayer的delegate,然后让delegate实现drawLayer:inContext:方法进行绘图
•注意:
–不能再将UIView设置为这个CALayer的delegate,因为UIView对象已经是内部层的delegate,再次设置会出问题
–无论使用哪种方法,都必须向层发送setNeedsDisplay消息,以触发相应绘图方法的调用
 
 
•当UIView收到setNeedsDisplay消息时,CALayer会准备好一个CGContextRef,然后向它的delegate即UIView,发送消息,并且传入已经准备好的CGContextRef对象。UIView在drawLayer:inContext:方法中会调用自己的drawRect:方法
•平时在drawRect:中通过UIGraphicsGetCurrentContext()获取的就是由CALayer传入的CGContextRef对象,在drawRect:中完成的所有绘图都会填入CALayer的CGContextRef中,然后被拷贝至屏幕
CALayer的CGContextRef用的是位图上下文(Bitmap Graphics Context)
 
 
当在UIView类中写了drawLayer:inContext:方法以后,需要调用该方法的super方法,来绘制内容,否则则不会绘制当前视图的Layer内容(不调用视图的DrawRect:方法)
如果在一个仕途上添加一个Layer,调用顺序是
调用视图的init方法初始化视图和layer--->调用layer代理即视图的方法drawLayer:inContext:,然后调用drawRect:方法,,最后调用子Layer的

drawInContext:方法