coreGraphics 对于iOS只能在drawRect中使用,因为只有在drawRect方法中可以通过UIGraphicsGetCurrentContext方法获取到可以用来绘图的context。
1.重新绘图相关方法和属性
通过UIView的setNeedsDisplay或setNeedsDisplayInRect:来使view重新调用drawRect方法进行绘图。
contentMode 该属性是定义当UIView的bounds变化的时候,如何去布局其内容。其中个就有一个可选项是UIViewContentModeRedraw,可以使得在UIView的bounds发生变化的时候再次调用drawRect进行重画。
2.CGLayer和CALayer的用法思路有点不同
对于Context来说,CGlayer对象与transparency layer对象,CGPath对象,以及使用CGContext方法创建的path,处在同等地位。
与CALayer不同,CGLayer更像是一个小的绘图元素,通常在需要重复同一个图像,比如一张桌布上的小碎花,就把小碎花画在CGLayer对象上,然后将CGLayer对象多次添加到context上。
CGLayer需要用Context来创建(方法是CGLayerCreateWithContext),这样CGLayer的属性就已经设置成和context一致,无需手动设置太多。当然自己也可以去改。
创建好CGLayer对象之后, 要在layer上作画还要先获取该layer对象的context,通过CGLayerGetContext方法,然后获取到context之后就可以开始在layer上画了,方法同画在其他context一样。
最后,就可以将这个layer添加到所需的地方,通常就是某个context上,往往会是创建这个layer的context,也不一定,只不过将layer添加到与其自身context一致的context上性能更好,apple的文档上这么说。将layer添加到context可以用方法CGContextDrawLayerInRect或CGContextDrawLayerAtPoint。