- OS支持兩套圖形API族:Core Graphics/QuartZ 2D 和OpenGL ES糜值。
OpenGL ES是跨平臺的圖形API蝙叛,屬于OpenGL的一個簡化版本邻眷。
QuartZ 2D是蘋果公司開發(fā)的一套API,它是Core Graphics Framework的一部分哮幢。
- OpenGL ES是應用程序編程接口畸裳,該接口描述了方法、結構装蓬、函數(shù)應具有的行為以及應該如何被使用的語義。也就是說它只定義了一套規(guī)范纱扭,具體的實現(xiàn)由設備制造商根據(jù)規(guī)范去做牍帚。
- drawRect 被調(diào)用
a.
-[DrawLineViewcontroller loadView]
-[DrawLineViewcontroller viewDidLoad]
-[DrawLineViewcontroller viewWillAppear:]
-[DrawLineView drawRect:]
-[DrawLineViewcontroller viewDidAppear:]
b.
調(diào)用view的setNeedsDisPlay或setNeedsDisplayInRect:時
c.
sizeToFit:
下面的示例代碼僅羅列了極為簡單的示例
- (void)drawRect:(CGRect)rect {
#pragma mark - 繪制基本圖形
// 在drawRect方法中調(diào)用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];