Quartz 2D在UIKit中也有很好的封装和集成,我们日常开发时所用到的UIKit中的组件都是由Core Graphics进行绘制的。不仅如此,当我们引入UIKit框架时系统会自动引入Core Graphics框架,并且为了方便开发者使用在UIKit内部还对一些常用的绘图API进行了封装。
2.获得上下文的环境,创建一个画布
Graphics Context是图形上下文,可以将其理解为一块画布,我们可以在上面进行绘画操作,绘制完成后,如果要在view上绘图,则将画布放到我们的view中显示即可,view看作是一个画框.
CGContextRef context=UIGraphicsGetCurrentContext();
3.创建并设置路径
4.将路径添加到上下文
5.设置上下文状态
6.绘制路径
CGContextAddEllipseInRect(context, CGRectMake(x, y, width, height)); //绘制椭圆形
CGContextAddArc(context, 250, 40, 40, 0, 2*PI, 0); //绘制一个圆
CGContextSetLineWidth(context, 2.0);//设置线的宽度
CGContextSetFillColorWithColor(context,color); //填充颜色
CGContextSetStrokeColorWithColor(context,color)//线框颜色
//绘制文字
[Nsstring drawInrect:(CGRect)withattributs:(NSDictionary *)]
//绘制图片
[UIimage drawInrect:(CGRect)] //如果尺寸不合适,会拉伸
[ UIimage drawAsPatternInRect:CGRectMake(x, y, width,height)];//平铺
CGContextSetLineWidth、CGContextSetLineDash
线条颜色和线条模式
CGContextSetRGBStrokeColor、CGContextSetGrayStrokeColor、CGContextSetStrokeColorWithColor、CGContextSetStrokePattern
填充颜色和模式
CGContextSetRGBFillColor,CGContextSetGrayFillColor,CGContextSetFillColorWithColor, CGContextSetFillPattern
阴影
CGContextSetShadow、CGContextSetShadowWithColor
整体透明度
CGContextSetAlpha(个别颜色也具有alpha成分)
文本属性
CGContextSelectFont、CGContextSetFont、CGContextSetFontSize、CGContextSetTextDrawingMode、CGContextSetCharacterSpacing
是否开启反锯齿和字体平滑
CGContextSetShouldAntialias、CGContextSetShouldSmoothFonts
-(void)drawRect:(CGRect)Rect;
{
//取得上下文
CGContextRef context=UIGraphicsGetCurrentContext();
//路径添加到上下文
CGContextAddRect(context,CGRectMake(140, 120, 60, 30));
//设置上下文状态:
CGContextSetLineWidth(context, 1.0);
aColor = [UIColor blueColor];
CGContextSetStrokeColorWithColor(context, aColor.CGColor);//线框颜色
//绘画路径
CGContextDrawPath(context, kCGPathFillStroke);
}
1.[self setNeedsDisplay] //更新整个视图
2.[self setNeedsDisplayInRect:CGRect] //更新视图的部分区域。
注意:不能直接调用 drawRect方法去刷新视图,否则会刷新无效
图形上下文变换的作用:平移,缩放,旋转
平移:CGContextTranslateCTM(context,CGFloat x, CGFloat y);
缩放:CGContextScaleCTM(context,CGFloat sx, CGFloat sy);
旋转:CGContextRoateCTM(context,CGFloat x);
CGContextSaveGState与CGContextRestoreGState的作用
使用Quartz时涉及到一个图形上下文,其中图形上下文中包含一个保存过的图形状态堆栈。在Quartz创建图形上下文时,该堆栈是空的。CGContextSaveGState函数的作用是将当前图形状态推入堆栈。之后,您对图形状态所做的修改会影响随后的描画操作,但不影响存储在堆栈中的拷贝。在修改完成后,您可以通过CGContextRestoreGState函数把堆栈顶部的状态弹出,返回到之前的图形状态
使用自定义的drawing code一般用在你想要动态的显示内容变化的时候。一般用在游戏或者一些绘图应用中,或者现有的控件ui的样式不满足需求。
2.iOS绘图系统自身也是非常高效,它不会频繁调用drawRect:方法,除非迫不得已(或调用了setNeedsDisplay方法)
3.一旦一个视图已由自己绘制完成,那么绘制的结果会被缓存下来留待重用,而不是每次重头再来。(苹果公司将缓存绘图称为视图的位图存储回填(bitmap backing store))
将代码移到drawRect:方法中是提高性能的普遍做法。这是因为绘图引擎直接对屏幕进行渲染相对于先是脱屏渲染然后再将像素拷贝到屏幕要来的高效