参考文档1
参考文档2
参考文档3
参考文档4
- OS支持两套图形API族:Core Graphics/QuartZ 2D 和OpenGL ES。
OpenGL ES是跨平台的图形API,属于OpenGL的一个简化版本。
QuartZ 2D是苹果公司开发的一套API,它是Core Graphics Framework的一部分。
- OpenGL ES是应用程序编程接口,该接口描述了方法、结构、函数应具有的行为以及应该如何被使用的语义。也就是说它只定义了一套规范,具体的实现由设备制造商根据规范去做。
- drawRect 被调用
a.
-[DrawLineViewcontroller loadView]
-[DrawLineViewcontroller viewDidLoad]
-[DrawLineViewcontroller viewWillAppear:]
-[DrawLineView drawRect:]
-[DrawLineViewcontroller viewDidAppear:]
b.
调用view的setNeedsDisPlay或setNeedsDisplayInRect:时
c.
sizeToFit:
下面的示例代码仅罗列了极为简单的示例
- (void)drawRect:(CGRect)rect {
#pragma mark - 绘制基本图形
// 在drawRect方法中调用UIGraphicsGetCurrentContext方法获取出来的就是Layer的上下文
CGContextRef context = UIGraphicsGetCurrentContext();
// 绘图(绘制直线), 保存绘图信息
// 设置起点
CGContextMoveToPoint(context, 50, 100);
// 设置终点
CGContextAddLineToPoint(context, 100, 100);
// 设置线条颜色 红色
CGContextSetRGBStrokeColor(context, 1.0, 0, 0, 1.0);
// 设置线条宽度
CGContextSetLineWidth(context, 10);
// 设置线条的起点和终点的样式
CGContextSetLineCap(context, kCGLineCapRound);
// 设置线条的转角的样式
CGContextSetLineJoin(context, kCGLineJoinRound);
// 绘制一条线
CGContextStrokePath(context);
//绘制第二条线
CGContextMoveToPoint(context, 150, 200);
//设置第二系线的终点
CGContextAddLineToPoint(context, 50, 100);
//设置第二条线颜色
CGContextSetRGBStrokeColor(context, 0, 1.0, 0, 1.0);
//绘制
CGContextStrokePath(context);
//绘制三角形
CGContextMoveToPoint(context, 50, 50);
CGContextAddLineToPoint(context, 100, 100);
CGContextAddLineToPoint(context, 150, 100);
CGContextClosePath(context);
CGContextStrokePath(context);
//绘制圆
CGContextSetLineWidth(context, 2);
CGContextAddEllipseInRect(context, CGRectMake(200, 200, 10, 10));
[[UIColor orangeColor] set];
CGContextFillPath(context);//实心圆
//CGContextStrokePath(context);//空心圆
//绘制矩形
CGContextAddRect(context, CGRectMake(10, 10, 50, 50));
[[UIColor colorWithRed:1.0 green:0 blue:0 alpha:1] set];
//CGContextStrokePath(context);
CGContextFillPath(context);
//绘制圆弧 圆心 半径 开始弧度 结束弧度 0表顺针
CGContextAddArc(context, 100, 100, 50, -M_PI_2, M_PI_2, 0);
CGContextStrokePath(context);
//绘制饼图
//画线
CGContextMoveToPoint(context, 100, 300);
CGContextAddLineToPoint(context, 100, 150);
//画弧
CGContextAddArc(context, 100, 300, 50, M_PI_2, M_PI, 0);
//并闭路径
CGContextClosePath(context);
CGContextFillPath(context);
#pragma mark - 绘制图片或文字
UIImage *image = [UIImage imageNamed:@"4.jpg"];
NSString *str = @"Fuck the world";
[image drawInRect:CGRectMake(0, 0, 300, 300)];
[str drawAtPoint:CGPointMake(100,400) withAttributes:@{
NSFontAttributeName:[UIFont systemFontOfSize:20]
}];
}
或者
- (void)drawRect:(CGRect)rect {
// Drawing code
NSLog(@"%s",__func__);
//1.获取上下文
CGContextRef contextRef = UIGraphicsGetCurrentContext();
//2.描述路径
UIBezierPath * path = [UIBezierPath bezierPath];
//起点
[path moveToPoint:CGPointMake(10, 10)];
//终点
[path addLineToPoint:CGPointMake(100, 100)];
//设置颜色
[[UIColor whiteColor]setStroke];
//3.添加路径
CGContextAddPath(contextRef, path.CGPath);
//显示路径
CGContextStrokePath(contextRef);
}
- (void)drawRect:(CGRect)rect {
//1、获取当前上下文
CGContextRef contextRef = UIGraphicsGetCurrentContext();
//2.描述路径
//ArcCenter:中心点
//radius:半径
//startAngle:起始角度
//endAngle:结束角度
//clockwise:是否逆时针
UIBezierPath * path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.bounds.size.width*0.5, self.bounds.size.height*0.5) radius:self.bounds.size.width*0.4 startAngle:0 endAngle:M_PI*2 clockwise:NO];
//3.添加路径到上下文
CGContextAddPath(contextRef, path.CGPath);
//4.设置颜色
[[UIColor brownColor]setFill];
//4.显示上下文 显示一个实心圆
//CGContextFillPath(contextRef);
//显示一个空心圆,描边
CGContextStrokePath(contextRef);
}
画三条不同颜色的线
//1 获取上下文
//分别设置线段的颜色
CGContextRef purple = UIGraphicsGetCurrentContext();
[[UIColor purpleColor]setStroke];
CGContextSaveGState(purple);//存储上下文
CGContextRef orange = UIGraphicsGetCurrentContext();
[[UIColor orangeColor]setStroke];
CGContextSaveGState(orange);
CGContextRef green = UIGraphicsGetCurrentContext();
[[UIColor greenColor]setStroke];
CGContextSaveGState(green);
UIBezierPath * path = [UIBezierPath bezierPath];
//设置线宽
path.lineWidth = 5;
//把紫色的上下文从栈中取出来
CGContextRestoreGState(purple);
//第一条线
[[UIColor purpleColor]setStroke];
[path moveToPoint:CGPointMake(10, 10)];
[path addLineToPoint:CGPointMake(10, 100)];
[path stroke];
//把紫色的上下文从栈中取出来
CGContextRestoreGState(orange);
path = [UIBezierPath bezierPath];
//设置线宽
path.lineWidth = 9;
//第二条线
[[UIColor orangeColor]setStroke];
[path moveToPoint:CGPointMake(30, 10)];
[path addLineToPoint:CGPointMake(30, 100)];
[path stroke];
//把紫色的上下文从栈中取出来
CGContextRestoreGState(green);
path = [UIBezierPath bezierPath];
//设置线宽
path.lineWidth = 3;
//第三条线
[[UIColor greenColor]setStroke];
[path moveToPoint:CGPointMake(50, 10)];
[path addLineToPoint:CGPointMake(50, 100)];
[path stroke];