在UIView的drawRect:方法中具体使用Quartz2D
1获取当前上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
2拼接图形(界面)
起点
CGContextMoveToPoint(ctx, 10, 10);
线段-从起点到终点
CGContextAddLineToPoint(ctx, 100, 100);
3 渲染
CGContextStrokePath(ctx); -stroke空心 -fill实心
⚠三角形:画两条线之后CGContextClosePath(ctx);关闭路径,连接终点和起点。
⚠四边形:CGContextAddRect(ctx, CGRectMake(x, y, w, h));
⚠线粗细:CGContextSetLineWidth(ctx, 10);
⚠笔颜色:CGContextSetRGBStrokeColor(ctx, r, g, b, a); -stroke空心 -fill实心
[[UIColor whiteColor] set]通用颜色 -setStroke空心色 -setFill实心颜色
⚠线头尾:CGContextSetLineCap(ctx, enum);
⚠转折点:CGContextSetLineJoin(ctx, enum);
⚠画椭圆:CGContextAddEllipseInRect(ctx, CGRect); -指定一个矩形就可以确定一个椭圆
⚠画圆形:把椭圆的CGRect给成正方形即可
⚠画圆弧:CGContextAddArc(ctx, x, y, r, sa, ea, cw); -x,y圆心 -r半径 -sa,ea开始/结束角度
-cw顺/逆时针,0顺1逆 -水平向右的方向是0度 -这方法也可以画圆
⚠画文字:NSString drawAtPoint/drawInRect withAttributtes:方法不用自己获取上下文
NSForegroundColorAttributeName/NSFontAttributeName
⚠画图片:UIImage drawAtPoint/drawInRect 方法类似与画文字 -drawINnRect会拉伸
drawAsPatternInRect方法 -在给定区域平铺,可以画花纹
⚠画曲线:CGContextAddQuadCurveToPoint(ctx, cx, cy, ex, ey)贝塞尔曲线
图形上下文栈
1保存状态:CGContextSaveGState(ctx);方法保存当前上下文状态
2恢复状态:CGContextRestoreGState(ctx);方法恢复之前保存的上下文状态
3保存相当于入栈,恢复相当于出栈。恢复到最近保存的状态。
矩阵操作
1CGContextScaleCTM(ctx, 0.5, 0.5);方法 -整体缩放
2CGContextRotateCTM(ctx, M_PI_4);方法 -整体旋转
3CGContextTranslateCTM(ctx, 0, 150);方法 -整体平移
裁减图片
1入栈初始上下文
2在上下文中生成一个形状用来当作裁减后的可见区域
3裁减:CGContextClip(ctx);
4把要裁减的图片放在要裁减的轮廓上面
5把上下文出栈,恢复到裁减以前
重绘-刷帧
1setNeedsDisplay方法,内部会清空绘制内容,重新调用drawRect方法
2setNeedsDisplayInRect方法,部分刷新,只刷新给出Rect区域