線段的繪制
方式一
// 1.獲取圖形上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 2.描述路徑
// 創建路徑
CGMutablePathRef path = CGPathCreateMutable();
// 設置起點
// path:給哪個路徑設置起點
CGPathMoveToPoint(path, NULL, 50, 50);
// 添加一根線到某個點
CGPathAddLineToPoint(path, NULL, 200, 200);
// 3.把路徑添加到上下文
CGContextAddPath(ctx, path);
// 4.渲染上下文
CGContextStrokePath(ctx);
方式二
//1 獲取上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//2 創建一個繪制的路徑
CGMutablePathRef path = CGPathCreateMutable();
//畫線
//(1)設置起始點
CGPathMoveToPoint(path, NULL, 50, 50);
//(2)設置目標點
CGPathAddLineToPoint(path, NULL, 200, 200);
CGPathAddLineToPoint(path, NULL, 50, 200);
//關閉路徑和注釋這句實現了一樣的效果
// CGPathAddLineToPoint(path, NULL, 50, 50);
//關閉路徑(將路徑封閉起來)
CGPathCloseSubpath(path);
//3 將路徑添加到上下文
CGContextAddPath(context, path);
//4 設置上下文的屬性
//設置填充顏色
CGContextSetRGBFillColor(context, 250/255.0, 200/255.0, 50/255.0, 1.0);
//設置線條顏色
CGContextSetRGBStrokeColor(context, 65/255.0, 170/255.0, 50/255.0, 1.0);
//設置線條寬度
CGContextSetLineWidth(context, 30);
//設置線條轉折點的樣式
CGContextSetLineJoin(context, kCGLineJoinRound);
//5 渲染上下文
/*渲染模式:
kCGPathFill:填充(實心)
kCGPathStroke:只畫線(空心)
kCGPathFillStroke:即畫線又填充
*/
//使用了設置屬性進行渲染
CGContextDrawPath(context, kCGPathFillStroke);
//6 釋放路徑
CGPathRelease(path);
方式三
// 獲取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 描述路徑
// 設置起點
CGContextMoveToPoint(ctx, 50, 50);
CGContextAddLineToPoint(ctx, 200, 200);
// 渲染上下文
CGContextStrokePath(ctx);
方式四
//1 獲取上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//2 添加多條線
CGPoint p0 = {50,50};
CGPoint p1 = {200,200};
CGPoint p2= {50,200};
CGPoint p3 = {50,50};
CGPoint points[] = {p0,p1,p2,p3};
CGContextAddLines(context, points, 4);
//3 設置屬性
//---UIKit提供的設置顏色的方法--------
//設置線條顏色
[[UIColor redColor] setStroke];
//設置填充顏色
[[UIColor blueColor]setFill];
//4 繪制路徑
CGContextDrawPath(context, kCGPathFillStroke);
方式五
// 貝瑟爾路徑
// 創建路徑
UIBezierPath *path = [UIBezierPath bezierPath];
// 設置起點
[path moveToPoint:CGPointMake(50, 50)];
// 添加一根線到某個點
[path addLineToPoint:CGPointMake(200, 200)];
// 繪制路徑
[path stroke];
方式六
//畫兩根線段
//創建貝瑟爾路徑
UIBezierPath *path = [UIBezierPath bezierPath];
//起點
[path moveToPoint:CGPointMake(50, 50)];
//終點
[path addLineToPoint:CGPointMake(200, 200)];
//線寬
path.lineWidth = 10;
//設置線條顏色和背景填充顏色均為紅色
[[UIColor redColor] set];
[path stroke];
UIBezierPath *path1 = [UIBezierPath bezierPath];
[path1 moveToPoint:CGPointMake(0, 0)];
[path1 addLineToPoint:CGPointMake(30, 60)];
[[UIColor greenColor] set];
path1.lineWidth = 3;
[path1 stroke];
曲線的繪制
方式一
//S型曲線
//1 設置起始點
CGContextMoveToPoint(context, 20, 200);
//2 畫貝塞爾曲線
//(1) 3個點
/*
CGContextAddCurveToPoint(<#CGContextRef _Nullable c#>, cp1x, cp1y, cp2x, cp2y, x, y)
<#CGContextRef _Nullable c#>:上下文
cp1x cp1y: 第一條切線的終點
cp2x cp2y: 第二條切線的起點
x y: 第二條切線的終點
*/
CGContextAddCurveToPoint(context, 100, 20, 200, 300, 300, 50);
//3設置屬性
[[UIColor redColor] setStroke];
//4 渲染
CGContextDrawPath(context, kCGPathStroke);
方式二
//拋物線曲線
// 獲取上下文
CGContextRef ctx = UIGraphicsGetCurrentContext();
// 描述路徑
// 設置起點
CGContextMoveToPoint(ctx, 50, 50);
// cpx:控制點(這里是150,20)
CGContextAddQuadCurveToPoint(ctx, 150, 20, 250, 50);
[[UIColor whiteColor]setStroke];
// 渲染上下文
CGContextStrokePath(ctx);
矩形繪制
方式一
//----------第一種:core Graphics-----------
//1 獲取上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//2 添加矩形
CGRect rect = CGRectMake(40, 40, 100, 200);
CGContextAddRect(context, rect);
//3 設置屬性
[[UIColor redColor]setStroke];
[[UIColor orangeColor]setFill];
//4 繪制
CGContextDrawPath(context, kCGPathFillStroke);
方式二
//----------第二種:UIKit- 提供繪制矩形的函數 (已經封裝好的)----------
[[UIColor redColor]setStroke];
[[UIColor orangeColor]setFill];
CGRect rect = CGRectMake(40, 40, 100, 200);
//繪制線條矩形(空心)
// UIRectFrame(rect);
//繪制填充的矩形(實心)
UIRectFill(rect);
方式三
// 圓角矩形
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(20, 20, 200, 200) cornerRadius:8];
//注意:如果矩形為正方形,cornerRadius的值為邊長的一半,就變成了圓形
//設置線條的顏色
[[UIColor whiteColor]setStroke];
//設置填充顏色
[[UIColor whiteColor]setFill];
//渲染
[path stroke];
[path fill];
繪制圓弧、圓(橢圓)、扇形
// 繪制圓弧
/**
*
*
* @param context 上下文
* @param x#> 圓的中心點坐標x description#>
* @param y#> 圓的中心點坐標y description#>
* @param radius#> 圓的半徑 description#>
* @param startAngle#> 開始的角度 description#>
* @param endAngle#> 結束的角度 description#>
* @param clockwise#> 畫的方向 0 順時針 1 逆時針
*/
CGContextAddArc(context, 160, 100, 100, 0, M_PI_4, 0);
//設置屬性
[[UIColor redColor]setStroke];
//繪制
CGContextDrawPath(context, kCGPathStroke);
// 繪制扇形
CGPoint center = CGPointMake(125, 125);
UIBezierPath *path = [UIBezierPath
// Center:圓心
// startAngle:弧度
// clockwise:YES:順時針 NO:逆時針
bezierPathWithArcCenter:center radius:100 startAngle:0 endAngle:M_PI_2 clockwise:YES];
// 添加一根線到圓心
[path addLineToPoint:center];
// 封閉路徑,關閉路徑:從路徑的終點到起點
[path closePath];
//渲染
[path stroke];
//繪制內切圓(橢圓)
CGRect rect = CGRectMake(50, 50, 200, 100);
//注意:如果為正方形,則畫出的是圓形;為長方形,則為橢圓
//設置屬性
[[UIColor blackColor]setStroke];
[[UIColor orangeColor]setFill];
//繪制線條矩形
//UIRectFrame(rect);
//根據矩形繪制的橢圓(我這里畫的是橢圓)
CGContextAddEllipseInRect(context, rect);
//繪制
CGContextDrawPath(context, kCGPathFillStroke);
提示:繪制弧、扇形的方法可以實現本節的所有圖形哦
繪制圖片
方式一
UIImage *image = [UIImage imageNamed:@"1.jpg"];
//一 UIKit提供的方法
//1 指定一個點來繪制圖片 (錨點)
[image drawAtPoint:CGPointMake(50, 50)];
//2 指定一個矩形范圍來繪制 (拉伸填充)
// [image drawInRect:CGRectMake(0, 0, 300, 200)];
//3 指定一個矩形范圍平鋪繪制
// [image drawAsPatternInRect:CGRectMake(0, 0, 300, 200)];
方式二
//二 core graphics 提供的函數
CGContextRef context = UIGraphicsGetCurrentContext();
UIImage *image = [UIImage imageNamed:@"1.jpg"];
//1 保存上下文狀態
CGContextSaveGState(context);
//2 切換坐標系
Quartz 2D的坐標系(與數學的二維坐標系一樣)----->UIKit的坐標系
//(1)向上平移一個高度
CGContextTranslateCTM(context, 0, 200);
//(2)改變y軸的方向 (縮放y的坐標,使其方向反轉)
CGContextScaleCTM(context, 1, -1);
//3 圖片繪制
CGContextDrawImage(context, CGRectMake(0, 0, 300, 200), image.CGImage);
//4 恢復到之前保存的上下文狀態
CGContextRestoreGState(context);
繪制文字
// 繪制文字
NSString *str = @"asfdsfsdf";
// 文字的起點
// Attributes:文本屬性
NSMutableDictionary *textDict = [NSMutableDictionary dictionary];
// 設置文字顏色
textDict[NSForegroundColorAttributeName] = [UIColor redColor];
// 設置文字字體
textDict[NSFontAttributeName] = [UIFont systemFontOfSize:30];
// 設置文字的空心顏色和寬度
textDict[NSStrokeWidthAttributeName] = @3;
textDict[NSStrokeColorAttributeName] = [UIColor yellowColor];
// 創建陰影對象
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor greenColor];
shadow.shadowOffset = CGSizeMake(4, 4);
shadow.shadowBlurRadius = 3;
textDict[NSShadowAttributeName] = shadow;
// 富文本:給普通的文字添加顏色,字體大小
[str drawAtPoint:CGPointZero withAttributes:textDict];
}